将数据从listview传递到主要活动

时间:2015-09-30 03:34:28

标签: android listview android-listview

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

MainActivity

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"
    />

4 个答案:

答案 0 :(得分:2)

在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);开始活动时提供的数字ID。如果您想对其他活动执行相同的操作,可以执行startActivityForResult(i, 2);并获取数据,并检查是否为2 if (requestCode == 2) { ...

答案 1 :(得分:1)

  1. 点击并列出项目后如果要完成列表活动,那么您可以做一件事。您可以使用startActivityForResult启动ListActivity。然后,当单击列表项时,您可以将结果发送到主活动。
  2. 要了解更多信息,请查看the doc

    1. 如果您不希望在列表项单击后立即完成List活动,那么您可以执行其他一些操作。 一个。您可以向主要活动发送广播并接收广播。 湾因为您的主要文本视图只会显示一个项目,所以您可以将项目存储在公共变量中

答案 2 :(得分:1)

您应该查看at the following guide,其中概述了如何开始活动,然后等待结果。

你目前正在做的问题是&#34;后筹码&#34;有两个主要活动的参考 - 即回击将带您进入列表活动,然后再次进入主要活动。

使用startActivityForResult()的优势可让您分离创建MainActivity的逻辑,并处理ListViewActivity的结果。

答案 3 :(得分:0)

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

数据是从已启动的意图返回的意图数据。当我们在被调用的intent上设置额外内容时,我们通常会使用这些数据。

考虑这个例子:

致电第二项活动

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数据以及如何设置和获取值。