繁体   English   中英

将数据从列表视图传递到主要活动

[英]Pass data from listview to main activity

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

主要活动

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

在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, 1); 如果要对另一个活动执行相同的操作,则可以执行startActivityForResult(i, 2); 并要获取数据,请检查ID 2 if (requestCode == 2) { ...

  1. 单击并列出项目后,如果您想完成列表活动,则可以做一件事。 您可以使用startActivityForResult启动ListActivity。 然后,当单击列表项时,您可以将结果发送到主活动。

要了解更多信息,可以查看文档

  1. 如果您不想在单击列表项后立即完成“列表”活动,则可以执行其他操作。 一种。 您可以将广播发送到主要活动并接收广播。 因为您的mainactivity的文本视图将仅显示一个项目,然后您可以将该项目存储在公共变量中

您应该查看以下指南该指南概述了如何开始活动,然后等待结果。

当前操作方式的问题在于,“后退堆栈”对主活动有2个引用-即回击将使您进入列表活动,然后再次访问主活动。

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

为此,您可以使用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数据以及如何设置和获取值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM