如何通过单击返回(非硬件后退按钮)返回上一个片段?

时间:2016-07-18 13:56:43

标签: android android-fragments

我只有1个活动,里面有2个碎片。启动活动时,片段A将启动。用户键入后,单击该按钮将指向片段B.所以我想要做的是通过添加“后退箭头”......就像这样< - 在左上角。

是否与 FragmentManager.popBackStack()有关?请指教! THX

MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentManager manager=getSupportFragmentManager();
    FragmentTransaction transaction=manager.beginTransaction();
    first first=new first();
    transaction.add(R.id.top,first);
    transaction.commit();
}
}

first.java

public class first extends Fragment implements View.OnClickListener{

Button get_button;
EditText get_input_name;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_first,container,false);
    get_input_name=(EditText)rootView.findViewById(R.id.input_name);
    get_button=(Button)rootView.findViewById(R.id.submit);
    get_button.setOnClickListener(this);
    return rootView;
}

public void onClick(View v){

    FragmentManager manager=getFragmentManager();
    FragmentTransaction transaction=manager.beginTransaction();
    two Two=new two();
    Bundle bundle = new Bundle();
    bundle.putString("input_name_value",get_input_name.getText().toString());
    Two.setArguments(bundle);
    transaction.replace(R.id.top,Two);
    transaction.commit();

}
}

two.java

public class two extends Fragment implements View.OnClickListener {
TextView get_display_input;
ImageView get_back_button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_two, container, false);
}

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    get_display_input=(TextView)getActivity().findViewById(R.id.display_input);
    get_back_button=(ImageView) getActivity().findViewById(R.id.back_button);
    Bundle bundle = getArguments();
    String get_name = bundle.getString("input_name_value");
    //int store_get_input=Integer.parseInt(get_name);
    get_display_input.setText("You have entered "+get_name);
}

public void onClick(View v){

    //  WHAT TO DO HERE IN ORDER TO RETURN TO PREVIOUS Fragment when clicking the button?

}
}

enter image description here

更准确地说,请参阅截图。

6 个答案:

答案 0 :(得分:5)

您可以使用FragmentManager的{​​{3}}方法,将其放在后面按钮的onClickListener内:

if (getFragmentManager().getBackStackEntryCount() != 0) {
    getFragmentManager().popBackStack();
}

如果您使用工具栏的默认后退按钮,即主页按钮,则可以将此代码放入onOptionsItemSelected()的{​​{1}}方法中来执行此操作:

Activity

或者,如果您希望在硬件后退按钮上按相同的行为按,则覆盖@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { if (getFragmentManager().getBackStackEntryCount() != 0) { getFragmentManager().popBackStack(); } return true; } return super.onOptionsItemSelected(item); } 类中的onBackPressed()方法,如下所示:

Activity

答案 1 :(得分:2)

查看培训文档here - 它们应该给你一个良好的开端。

MainActivity

答案 2 :(得分:1)

您只需要这一行代码!

getFragmentManager().popBackStackImmediate();

答案 3 :(得分:1)

是的,它与FragmentManager.popBackStack();

有关

看看这里,有很多方法: https://developer.android.com/reference/android/app/FragmentManager.html#popBackStack

对我而言,getFragmentManager().popBackStackImmediate();正是如此。

答案 4 :(得分:1)

在您处理硬件后退按钮的活动中:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

因此对于按钮点击方法:

getFragmentManager().popBackStack();

答案 5 :(得分:0)

我知道我回答这个问题已经来不及了,但是您可以调用getActivity.onBackpress();。单击该后退图标的方法。

相关问题