【问题标题】:Android : startActivityForResult and OnActivityResult in getView() method [duplicate]Android:getView() 方法中的 startActivityForResult 和 OnActivityResult [重复]
【发布时间】:2012-12-30 04:11:28
【问题描述】:

可能重复:
Android : Passing button click response from getView() method of adapter class to 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; 
    }

【问题讨论】:

  • 请不要转发问题:Android : Passing button click response from getView() method of adapter class to mainActivity。如果您想吸引更多关注,请尝试改进您的原始问题。
  • 这是错误的......谢谢
  • 什么意思?您想直接在 getView() 中启动 activityforresult 还是在 getView() 方法中编写 onClick() 的按钮单击中启动?
  • 其实我想把按钮点击响应带回mainActivity。我找不到办法做到这一点。因此我计划从 getView() 中的 Onclick 开始活动。如果不清楚,请告诉我

标签: android android-intent android-arrayadapter android-button start-activity


【解决方案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;
     }
}

当您从主 Activity 实例化 CustomAdapter 时,请执行以下操作:

CustomAdapter adapter = new CustomAdapter(MainAcitvityClassName.this);

上面将结果返回给主活动,尽管您是从非活动类开始的。因此,您可能需要在 MainActivity 类中定义 onActivityResult(...) 。我想这就是你想要的。希望这会有所帮助。

【讨论】:

  • 感谢 Appu,我已将适配器类用作内部类并实现了这一点。以后我会检查的..再次感谢
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2022-01-21
  • 2022-11-30
  • 2014-08-11
  • 2011-09-22
相关资源
最近更新 更多