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

gos*_*ove 1 android android-fragments

我只有1个活动,其中有2个片段。当开始活动时,片段A将启动。在用户键入某些内容并单击后,按钮将定向到片段B。因此,我想做的是通过在左上角添加类似<-的“后退箭头”。

它与FragmentManager.popBackStack()有关吗?请指教 !谢谢

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();
}
}
Run Code Online (Sandbox Code Playgroud)

第一.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();

}
}
Run Code Online (Sandbox Code Playgroud)

二.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?

}
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

Ash*_*jan 6

您可以使用的popBackStack()方法来完成FragmentManager此操作,并将其放入onClickListener后退按钮的内:

if (getFragmentManager().getBackStackEntryCount() != 0) {
    getFragmentManager().popBackStack();
}
Run Code Online (Sandbox Code Playgroud)

如果您使用工具栏的默认后退按钮(即主页按钮),则可以通过将以下代码放置在的onOptionsItemSelected()方法中来做到这一点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);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望在按下硬件后退按钮时具有相同的行为,则可以像下面这样重写类中的onBackPressed()方法Activity

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() != 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)