[英]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) { ...
startActivityForResult
启动ListActivity。 然后,当单击列表项时,您可以将结果发送到主活动。 要了解更多信息,可以查看文档
为此,您可以使用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.