[英]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.