2011-11-10 120 views
0

下面的代碼給生成的ListView從列表視圖獲取ID當點擊項目,在另一個活動

public class MyList extends ListActivity { 
static final String[] COUNTRIES = new String[] {LONG LIST OF COUNTRIES}; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setListAdapter(new ArrayAdapter<String>(this,R.layout.main,COUNTRIES)); 
    ListView lv=getListView(); 
    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent,View view,int position,long id){ 
     Intent i=new Intent(MyList.this,Another.class); 
     Bundle b = new Bundle(); 
          b.putInt("id", (int)id); 
          intent.putExtras(b); 
          startActivity(intent); 
     } 
    }); 
    } 
} 

另一項活動是現在

public class Another extends Activity{ 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.mainseocnd); 
    Bundle b=new Bundle(); 
    int value= b.getInt("id",0); 
    TextView tv=(TextView)findViewById(R.id.text); 
    tv.setText(""+value); 
    } 
} 

當我點擊任何列表項說ID-5它總是顯示0 我想獲得列表視圖的項目ID,就像用戶點擊列表中的第二項,另一個活動應顯示1(B/C以0開頭)。 請糾正我哪裏出問題了。 在此先感謝!

回答

1

在第二項活動,而不是

Bundle b=new Bundle(); 
int value= b.getInt("id",0); 

使用

int value = icicle.getInt("id",0); 

這會給你一個解決方案... :)

+0

謝謝問題解決。爲了您的努力,您的答案被接受。 –

+1

只是爲了確保我得到了正確的答案:這個答案沒有解決您的問題,但是您將其標記爲正確的解決方案? – 2011-11-10 15:42:34

1

您檢索值的方法是錯誤的:

Bundle b=new Bundle(); 
int value= b.getInt("id",0); 

您c當沒有任何(這是新的)時,創建一個新的包並試圖從中獲得一個值。 您必須獲取爲該活動提供啓動意向的附加組件。嘗試

int value = getIntent().getIntExtra("id", 0); 

改爲。

+0

+1。謝謝你的回覆..你的回答也是正確的。 –

+0

謝謝,但是出於好奇(以及對搜索引擎用戶清楚)我想知道:上面的答案是否真的適合您?就我而言,'savedInstanceState'和啓動意圖附加組件是兩種不同的東西,它們唯一共同的地方就是它們將信息存儲在一個'Bundle'中。例如。當這項活動第一次啓動時,你應該得到一個NPE。 – 2011-11-11 12:16:43

+1

實際上,我使用intent.putExtra傳遞了值,並使用getIntent()獲取了該值;和intent.getInt(「id」,0); –

相關問題