2011-12-10 42 views
0

我創建了一個自定義SimpleCursorAdapter,因爲我需要每行一個文本和2個按鈕。創建自定義SimpleCursorAdapter

如果我點擊一個按鈕,他應該調用Activity Lektion。 在這個Lektion中,他應該知道從哪個Button調用過來的,所以我想在onClickEvent中發送Lektion的id作爲一個Bundle。

但這並不工作,它只是保存了我總是最後一個ID ..

我怎樣才能做到這一點?

public class LektionenCursorAdapter extends SimpleCursorAdapter{ 
    private Cursor c; 
    private Context context; 
    private Bundle bundle; 

    public LektionenCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     this.c = c; 
     this.context = context; 
    } 


    public View getView(int pos, View inView, ViewGroup parent){ 
     if(inView == null){ 
      inView = View.inflate(context, R.layout.lektionenoverview_entry, null); 
     } 
     View row = inView; 

     this.c.moveToPosition(pos); 

     String id = this.c.getString(this.c.getColumnIndex("_id")); 
     Log.i("Cursor", id); 
     String description = this.c.getString(this.c.getColumnIndex("Description")); 
     String info = this.c.getString(this.c.getColumnIndex("Info")); 
     String test = this.c.getString(this.c.getColumnIndex("Test")); 

     TextView descriptionTextView = (TextView)row.findViewById(R.id.description); 
     Button infoButton = (Button)row.findViewById(R.id.infoButton); 
     Button testButton = (Button)row.findViewById(R.id.testButton); 

     bundle = new Bundle(); 
     bundle.putString("LektionNummer", id); 

     descriptionTextView.setText(id+". "+description); 

     if(info != null && info.length() > 0){   
      infoButton.setOnClickListener(new OnClickListener() {   
      public void onClick(View v) { 
       Intent intent = new Intent(context, Lektion.class); 
       intent.putExtras(bundle); 
       context.startActivity(intent);     
      } 
     }); 

     } 
     if(test != null && test.length() > 0){ 

     } 
     return row; 
    } 

} 

回答

0

不需要使用CursorAdapter,因爲您想顯示2行和按鈕,您可以使用任何其他更簡單的適配器。

對於每個視圖,getView方法被多次調用,而不是當您單擊視圖或按鈕時。您每次都重新實例化Bundle,它只是保存最後一次getView調用的id(因爲每次調用都會破壞前一次調用),並且您還在每次調用時創建一個新的OnClickListener。

您可能想要使用OnItemClickListener,並且只在getView()方法之外創建一個實例。

+0

但我不想單擊整行。 我有很多行,總是有2個按鈕,我怎麼能不同這些按鈕之間?因爲例如infoButton1調用Lektion1和infoButton2調用Lektion2,它應該知道哪個按鈕因爲該行而點擊了.. – krackmoe

+0

我對OnItemClick的錯誤。使代碼工作的最快方法是停止在每個getView上重新創建Bundle。也許你可以使用setTag方法來添加商店的ID。主要問題是你在每次調用時都會創建一個新的Bundle,從而刪除前一個Bundle(這就是爲什麼你只能得到最新的行) – momo