2016-10-11 39 views
-2

我一直在尋找其他很多答案,其中最完整的答案是:Sending data back to the Main Activity in android。遵循這些最好的方法,當我嘗試從返回的意圖中獲取字符串時,我看不到任何數據。意向數據沒有返回

以下是用startActivityForRestult()調用第二個活動的主要活動,然後在textview中顯示來自intent的字符串。

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      String myStr = extras.getString("TASK"); 
      TextView tv = (TextView) findViewById(R.id.taskList); 
      tv.setText(myStr); 
     } 

    }//onActivityResult 

    /** Called when the user clicks the Add Task button */ 
    public void addTask(View view) { 
     Intent intent = new Intent(this, AddTaskActivity.class); 
     startActivityForResult(intent, 1); 
    } 
} 

而我試圖將可變字符串任務返回到主活動的第二個活動。 代碼截斷只是意圖返回部分:

String task = "foo"; 

Intent returnIntent = getIntent(); 
returnIntent.putExtra("TASK", task); 
setResult(Activity.RESULT_OK,returnIntent); 
finish(); 

從一切我已閱讀,這應該是所有的參與,但我錯過了一些東西,因爲沒有在第一個活動顯示了,我不清楚爲什麼。

回答

1

在您的示例中使用傳入onActivityResult調用數據的意圖,而不是獲取創建活動時傳入的意圖的getIntent。

I.E.

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
     Bundle extras = data.getExtras(); //THIS IS THE LINE I CHANGED 
     if (extras != null) { 
      String myStr = extras.getString("TASK"); 
      TextView tv = (TextView) findViewById(R.id.taskList); 
      tv.setText(myStr); 
     } 
}//onActivityResult 
0

在onActivityResult()方法中,您沒有使用getIntent()方法獲取數據。

onActivityResult()方法有3個參數。

  1. 將請求代碼傳遞給startActivityForResult()方法。

  2. 第二個活動指定的結果代碼。如果操作成功,則爲RESULT_OK,如果用戶退出或由於某種原因操作失敗,則爲RESULT_CANCELED。

  3. 一個攜帶結果數據的Intent。

因此,從第三個參數中,您可以獲取數據。