簡體   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