【问题标题】:back to previous activity with intent有意图地回到以前的活动
【发布时间】:2013-12-13 03:41:15
【问题描述】:

我有两个活动,当我在第一个活动上按 Enter 时,它将打开第二个活动,它包含一个 ListView,当我从 ListView 中选择一个项目时,它会获取它的值并带回第一个活动

这是我尝试过的;

第二次活动

listPerasat.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
     public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            NamaPrst = ((TextView) view.findViewById(R.id.txtListNamaPrst)).getText().toString();
            Intent i = new Intent();
            i.putExtra("NAMA_PERASAT", NamaPrst);
            finish();
        }
    });
}

第一次活动

edtText.setText(getIntent().getStringExtra("NAMA_PERASAT")); // inside onCreate

public void onActivityResult(int requestCode,int resultCode, Intent data)
{
    edtText.setText(getIntent().getStringExtra("NAMA_PERASAT"));
}

但什么也没发生。如何获得意图并返回之前的活动?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    您想为此致电startActivityForResult()。所以在你的第一个 Activity 类似

    Intent i = new Intent(FirstActivity.this, SecondActivity.class);
    startActivityForResult(i, SOME_REQUEST_CODE); // you give SomeRequesSOME_REQUEST_CODE an int value
    

    然后在您的onItemClick() 中,您需要致电setResult() 并发回Intent。这将在您的第一个 Activity 中调用 onActivityResult()

    listPerasat.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
     public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            NamaPrst = ((TextView) view.findViewById(R.id.txtListNamaPrst)).getText().toString();
            Intent i = new Intent();
            i.putExtra("NAMA_PERASAT", NamaPrst);
            setResult(RESULT_OK, i);
            finish();
        }
    });
    }
    

    在您的第一个ActivityonActivityResult() 中,不要调用getIntent()。这将尝试使用最初启动您的第一个ActivityIntent。相反,请使用您传回的Intent

    @Override
    public void onActivityResult(int requestCode,int resultCode, Intent data)
    {
        edtText.setText(data.getStringExtra("NAMA_PERASAT"));
    }
    

    See this answer for another example

    【讨论】:

    • 很好,它有效,但SOME_REQUEST_CODE 是干什么用的?我用 1 试了一下,出现错误,然后我用 0 试了一下,一切正常
    • 你可以使用0也可以创建自己的constant int来使用。
    【解决方案2】:

    你之前忘记开始活动了

    finish();
    

    startActivity(intent);
    // or to start with a back result
    // startActivityForResult(intent, YOUR_REQUEST_CODE, EXTRA_BUNDLE);
    finish();
    

    【讨论】:

      【解决方案3】:

      试试这个:

      Intent resultIntent = new Intent(ctx, ViewMessageDialog.class);
      resultIntent.putExtra("NAMA_PERASAT", message);
      ctx.startActivity(resultIntent);
      

      【讨论】:

        【解决方案4】:

        调用第二个活动以获得结果。它将在 OnAcitiviyResult 上返回您选择的数据。 就像下面这样:

        link to post

        【讨论】:

          【解决方案5】:

          second activity 中像这样编辑您的代码

          Intent i = new Intent();
                  i.putExtra("NAMA_PERASAT", NamaPrst);
                  setResult(RESULT_OK, i);
                  finish();
          

          然后在first activity'sonActivityResult() 中,首先检查结果是否“OK”,即选择了某些东西。

             public void onActivityResult(int requestCode,int resultCode, Intent data)
              {
                if(resultCode == Activity.RESULT_OK){
                  edtText.setText(data.getStringExtra("NAMA_PERASAT"));
                }
              }
          

          如果在打开第二个活动后您没有选择任何内容并按下back button,那么您将收到错误消息,因为second activity 没有传递任何内容。所以首先检查是否执行了setResult(RESULT_OK, i);,即添加了extras,我们现在手动设置一切都是OK

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-02
            • 2018-02-09
            • 2019-10-09
            • 1970-01-01
            • 1970-01-01
            • 2014-11-24
            • 1970-01-01
            相关资源
            最近更新 更多