【问题标题】:Pass data from listview to main activity将数据从列表视图传递到主要活动
【发布时间】:2015-09-30 12:24:37
【问题描述】:

我的主要活动包括按钮和文本视图。当我单击按钮时,它将显示一个列表视图并将一些数据填充到该列表视图中。在列表视图中,我单击一个项目,我想将项目数据发送到主要活动中的文本视图。但是,它有崩溃。我不知道找到问题并记录(不显示)。你能看看我的代码并提供解决方案吗?

主活动

btnManage = (Button) findViewById(R.id.btnManage);
btnManage.setText(manageLabel);
btnManage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {
        Intent intent = new Intent(v.getContext(), ListViewActivity.class);
        intent.putExtra("List_data", "Hello");
        v.getContext().startActivity(intent);

    }
});

在 ListViewActivity 我有

Bundle bundle = getIntent().getExtras();
String data_String= bundle.getString("List_data");
ArrayList<String> data = new ArrayList<String>();
data.add(data_String);
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, data);    
// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter( listAdapter ); 
//Click one item
public void onItemClick(AdapterView<?> parent, View view, int position,
      long id) {

String  data_send    = (String) mainListView.getItemAtPosition(position);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("Data_Send", data_send);
startActivity(intent);
 }

在MainActivity的onCreate函数中,我有

Bundle bundle = getIntent().getExtras();
String data_activity =bundle.getString("Data_Send");

清单文件

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ListViewActivity"
        android:label="@string/app_name" 
        android:screenOrientation="portrait"
    />

【问题讨论】:

  • 您的日志在哪里?如果您的日志没有显示,您应该清除 Logcat 或重新启动您的 android studio。您必须查看日志才能更好地了解您的问题所在

标签: android listview android-listview


【解决方案1】:

在 ListViewActivity 中,您尝试启动已启动的 MainActivity,因此出现错误。

您需要完成 ListViewActivity 活动,以便它返回到上一个活动,即 MainActivity 并传递数据

在 ListViewActivity 中,您完成活动并像这样传回数据

Intent intent = new Intent();
intent.putExtra("Data_Send", data_send);
setResult(RESULT_OK, intent);
finish();

在 MainActivity 你像这样启动 ListViewActivity

Intent i = new Intent(getApplicationContext(), ListViewActivity.class);
i.putExtra("List_data", "Hello");
startActivityForResult(i, 1);

在 MainActivity 中,您还需要从 ListViewActivity 中取回数据,以便添加

public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                String data = data.getStringExtra("Data_Send");

              // do whatever with data string
}}};

if (requestCode == 1) { 是您在使用startActivityForResult(i, 1); 开始活动时提供的编号。如果你想对另一个活动做同样的事情,你可以做 startActivityForResult(i, 2); 并取回数据,你检查 id 2 if (requestCode == 2) { ...

【讨论】:

  • 当我切换到 ListViewActivity 时是否需要杀死/删除 MainAcitivity ?
  • @ user3051460 -- 不。我认为杀死主要活动会杀死应用程序。
  • 是的,我明白了...感谢您的帮助
【解决方案2】:
  1. 单击并列出项目后,如果您想完成列表活动,那么您可以做一件事。您可以使用startActivityForResult 启动 ListActivity。然后当单击列表项时,您可以将结果发送到主要活动。

要了解更多信息,您可以查看the doc

  1. 如果您不想在单击列表项后立即完成列表活动,那么您可以做一些其他的事情。 一个。您可以向主要活动发送广播并接收广播。 湾。由于您的 mainactivity 的文本视图将仅显示一项,因此您可以将该项存储在公共变量中

【讨论】:

    【解决方案3】:

    你应该看看at the following guide,它概述了如何开始一个活动,然后等待结果。

    您当前执行方式的问题是“后退堆栈”有 2 个对主要活动的引用 - 即回击会将您带到列表活动,然后再转到主要活动。

    使用startActivityForResult() 的好处是可以分离出创建MainActivity 的逻辑,以及处理ListViewActivity 的结果。

    【讨论】:

      【解决方案4】:

      您可以为此目的使用 startActivityForResult。 当您调用 Activity.startActivityForResult() 时,您设置了 requestCode。稍后,onActivityResult() 需要这个请求代码来确定哪个 Activity 正在向它发送数据。我们不需要在 setResult() 上再次提供 requestCode,因为 requestCode 是随身携带的。

      数据是从启动的意图返回的意图数据。当我们在被调用的 Intent 上设置 extras 时,我们通常会使用这些数据。

      考虑这个例子:

      呼叫第二个活动

      Intent i = new Intent(MainActivity.this, CheckActivity.class);
      startActivityForResult(i, REQUEST_CODE_CHECK);
      

      在第二次活动中,设定意图结果

      getIntent().putExtra("TADA", "bla bla bla");
      setResult(RESULT_OK, getIntent());
      finish();
      

      回到第一个活动,ONACTIVITYRESULT()

      if(requestCode == REQUEST_CODE_CHECK && resultCode == RESULT_OK){
          text1.setText(data.getExtras().getString("TADA") );
      }
      

      给你。您现在应该了解什么是 Intent 数据以及如何设置和获取值。

      【讨论】:

        猜你喜欢
        • 2012-11-12
        • 2015-08-30
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2013-11-03
        • 2016-07-26
        • 2013-07-11
        相关资源
        最近更新 更多