按钮上的关闭片段单击并返回结果?

时间:2014-04-22 01:37:08

标签: android android-fragments

单击片段内的按钮,是否可以关闭同一活动中的两个片段并将片段的结果返回给另一个活动?一个片段期望输入,而另一个片段具有供用户查看的信息并且不期望输入。

此外,我的代码在活动中使用片段之前工作,但是当单击意图转到包含片段的活动(NextActivity.class)时,片段不再显示...是否有任何碰巧知道为什么片段没有出现?

以下是我的一些代码

原始活动的一部分:

    public class MessageList extends ListActivity {

    private void createMessage() {
    Intent i = new Intent(this, NextActivity.class);
    startActivityForResult(i, ACTIVITY_CREATE); //this line is incorrect, right?
    }}

以下是片段类的片段:

        public class MessageEditorFragment extends Fragment {

        confirmButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            getActivity().finish();
        }}

此处还有包含片段的活动类,只需要你看一下:

    public class NextActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab one = actionBar.newTab().setText("Message Editor");
    Tab two = actionBar.newTab().setText("Information");

    one.setTabListener(new MyTabListener(new MessageEditorFragment()));
    two.setTabListener(new MyTabListener(new InformationFragment()));

    actionBar.addTab(one);
    actionBar.addTab(two);
    }
    public class MyTabListener implements TabListener{
    Fragment fragment;

    public MyTabListener(Fragment f){
        fragment = f;
    }}}

我非常感谢所有人和任何帮助!如果您还需要查看更多代码,请告诉我。谢谢:)

1 个答案:

答案 0 :(得分:1)

通过调用Activity销毁finish时,fragments都将destroyed/closed

因此,在finish片段Activity之前,您可以将值传递给启动它的Activity

当您启动Activity时,您需要为Activity启动Result,以便从Fragment/Activity

返回结果数据

Activity声明整数请求代码

 int FRAGMENT_REQUEST_CODE = 1000;

按照您的逻辑

开始活动
 Intent intent = new Intent(this,MainActivityEx.class);
 startActivityForResult(intent, FRAGMENT_REQUEST_CODE);

添加回调方法onActivityResult以接收结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == FRAGMENT_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {

            TextView textView = (TextView)findViewById(R.id.textView1);
            textView.setText(data.getExtras().getString("DATA"));
        }
    }
}

现在。在片段中,当您关闭两个Fragments时,您可以将数据传回给来电者Activity

Intent intent = new Intent();
intent.putExtra("DATA","Hai");
getActivity().setResult(Activity.RESULT_OK,intent);
getActivity().finish();