2011-03-31 93 views
0

我在Android應用程序,活動A和活動B中有兩個活動。活動A通過一個Intent觸發活動B,然後當我在活動B中時,這是一個listView我點擊一個特定項目並在回到活動A時使用putExtras()作爲我的意圖的一部分將數據傳回給活動A.Android中的意圖問題

我遇到的問題是,當我從listView中選擇要傳回的項目時到活動一個應用程序崩潰,但是當我使用一個正常的意圖,它不跨活動傳遞任何數據,它工作正常。

下面的代碼演示了我正在嘗試做什麼。

活動A

public class ActivityA extends Activity { 

    private String myString; 
    @Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
     Button selectEvent = (Button) findViewById(R.id.events); 

     myString = savedInstanceState != null ? savedInstanceState.getString("myKey"):null; 

    if(myIntentString == null) 
    { 
     Bundle extras = getIntent().getExtras(); 

     myString = extras != null ? extras.getString("myKey"):null; 
    } 

    selectEvent.setText(myString); 

    selectEvent.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent myIntent = new Intent(ActivityA.this, ActivityB.class); 
       ActivityA.this.startActivity(myIntent); 
      } 
     }); 
    } 
} 


public class ActivityB extends ListActivity 
{ 
private String selection; 
private final int SECONDARY_ACTIVITY_REQUEST_CODE = 0; 
String[] listOfNames = {"Peter", "Paul", "John"}; 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.events); 

    setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, listOfData)); 
} 

protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    selection = l.getItemAtPosition(position).toString(); 

      Intent myIntent = new Intent(getApplicationContext(), ActivityA.class); 

      myIntent.putExtra("myKey", selection); 

      startActivityForResult(myIntent, SECONDARY_ACTIVITY_REQUEST_CODE); 
} 
} 

你的幫助將非常感激,謝謝。

+1

退房與logcat的日誌。聽起來像一個空指針。 – 2011-03-31 02:43:09

+0

我也投注空指針。如果你可以發佈日誌,也許我們可以確切地知道它發生了什麼。 – 2011-03-31 02:44:52

+1

我在Activity A中看不到'onActivityResult'。不能用這種方法做這件事。 – user432209 2011-03-31 03:10:57

回答

1

你在這裏混淆了兩個概念。

1)如何獲得在活動

2)如何從活動數據返回給調用的Activity通過一個Intent傳遞的數據。

你想要#2。

user432209是關於活動A.

缺乏onActivityResult函數的正確的,但既然你startActivity代替startActivityForResult調用活動B,這是可以理解的。

您想通過startActivityForResult啓動ActivityB並處理ActivityA的onActivityResult方法中返回的數據。

selectEvent.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
      Intent myIntent = new Intent(ActivityA.this, ActivityB.class); 
      ActivityA.this.startActivityForResult(myIntent, ActivityA.INTENT_CODE); 
     } 
}); 

... 
private static final int INTENT_CODE = 1; 
... 
protected void onActivityResult (int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == INTENT_CODE) 
    { 
     Bundle extras = (data != null) ? data.getExtras() : null; 
     myString = extras != null ? extras.getString("myKey"):null; 
    } 
} 

要從ActivityB向ActivityA返回數據,請不要在ActivityA上調用startActivityForResult

在ActivityB,叫setResult() with result code and the intent containing the data to return

protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    selection = l.getItemAtPosition(position).toString(); 

    resultIntent = new Intent(); 
    resultIntent.putExtra("myKey", selection); 
    setResult(Activity.RESULT_OK, resultIntent); 
    finish(); 
}