1

重複の可能性:
Android : アダプタ クラスの getView() メソッドからボタン クリック応答を mainActivity に渡す

ArrayAdapter を拡張するクラスを作成しました。このアダプターは、いくつかの TEXTVIEW と BUTTON を処理します。ボタンをクリックするたびに、インテントを通じて次のアクティビティとの双方向通信を確立したいと考えています。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; 
    }
4

1 に答える 1

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(...) を定義する必要がある場合があります。これはあなたが望むものだと思います。お役に立てれば。

于 2012-12-30T06:12:54.093 に答える