1

可能重複:
Android : Passing button click response from getView() method of adapter class to mainActivity機器人:startActivityForResult和OnActivityResult在getView()方法

我已經寫延伸ArrayAdapter的類。該適配器處理幾個TEXTVIEW和一個按鈕。對於每個按鈕點擊,我想通過意向與下一個活動建立雙向溝通。可以在getView()方法中使用startActivityForResult和OnActivityResult。如果是這樣,請你告訴我如何使用它。

在此先感謝。

以下是getView方法

public View getView(final int position, View convertView, ViewGroup parent) {  
    ViewHolder holder; 
    int type = getItemViewType(position); 

    if (convertView == null) { 
     holder = new ViewHolder(); 
     switch (type) { 
     case 0: 
      convertView = vi.inflate(R.layout.group, null); 
      holder.menuItem = (TextView) convertView.findViewById(R.id.tvGroup); 
      convertView.setBackgroundColor(Color.RED); 
      break;    
     case 1: 
      convertView = vi.inflate(R.layout.confirmitem, null); 
      holder.menuItem = (TextView) convertView.findViewById(R.id.tvConfirmItem); 
      holder.quantity = (TextView) convertView.findViewById(R.id.tvQuantity); 
      holder.cancel = (Button) convertView.findViewById(R.id.bCancel); 

      // cancel button 
       holder.cancel.setOnClickListener(new View.OnClickListener() {   
        public void onClick(View v) {     
         Log.i("ConfirmAdapter ","Button postion "+ position + "canceled item : " + menuItemList.get(position).getTicketItemObject().getName()); 
         }  
       }); 
      break; 
     } 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    }  

    switch (type) { 
    case 0:   
     holder.menuItem.setText(menuItemList.get(position).getTicketItemObject().getCategoryName()) ; 
     convertView.setBackgroundColor(Color.RED); 
     break;    
    case 1: 
     holder.menuItem.setText(menuItemList.get(position).getTicketItemObject().getName()); 
     holder.quantity.setText(Integer.toString(menuItemList.get(position).getTicketItemObject().getItemCount())); 
     break; 
    } 

    return convertView; 
    } 
+2

請不要重新發布問題:[Android:將按鈕點擊響應從適配器類的getView()方法傳遞給mainActivity](http://stackoverflow.com/q/14086039/1267661)。如果你想吸引更多的注意力,試着改善你的原始問題。 – Sam

+0

這是錯誤的。謝謝 – user1822729

+0

你是什麼意思?你想直接在getView()方法中直接啓動activityforresult,或者在onClick()方法中使用getClick()方法編寫的按鈕單擊中啓動? – Kanth

回答

1

試試這個,讓我知道:

僞代碼(未經測試):

holder.cancel.setOnClickListener(new View.OnClickListener() {   
        public void onClick(View v) {     
         Log.i("ConfirmAdapter ","Button postion "+ position + "canceled item : " + menuItemList.get(position).getTicketItemObject().getName()); 
         } 

((Activity) passedContext).startActivityForResult(.....) ;  
       }); 

哪裏passedContext是你需要上下文在你的customadapter類的構造函數中進行初始化,如下所示。

class CustomAdapter extends ArrayAdapter 
{ 
      private Context passedContext; 
      CustomAdapter(Context context) 
    { 
     passedContext = context; 
    } 
} 

當你實例從您的主要活動CustomAdapter,請執行下列操作:

CustomAdapter adapter = new CustomAdapter(MainAcitvityClassName.this); 

以上結果返回給主要活動,雖然你從非活性類開始此。所以,你可能需要在MainActivity類中定義onActivityResult(...)。我想這是你想要的。希望這可以幫助。

+0

謝謝Appu,我已經使用適配器類作爲內部類,並實現了這一點。我會在將來檢查這一點..再次感謝 – user1822729

相關問題