我有一个主要活动包括按钮和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"
/>
答案 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)
startActivityForResult
启动ListActivity。然后,当单击列表项时,您可以将结果发送到主活动。 要了解更多信息,请查看the doc
答案 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数据以及如何设置和获取值。