如何从ListView适配器调用活动?

时间:2011-09-22 07:07:45

标签: android

我有自定义ListView,我的ListView包含一个button,如果我们点击按钮我想要使用某些数据进行另一项活动。我使用了以下代码,

holder.mMore.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == event.ACTION_DOWN){
                  Intent moreIntent=new Intent(getContext(),SelectItemDesp.class);
                  v.getContext().startActivity(moreIntent);

                }
                return false;
            }
        });

显示错误。请帮助我

5 个答案:

答案 0 :(得分:1)

我假设您已经为ListView适配器编写了一个类。让我们快速命名这个类:MyListViewAdapter。在这个类中,你很可能有一个构造函数。它看起来像这样:

public MyListViewAdapter (Context context, ArrayList<String> myList) {
super (context, R.layout.my_layout, R.id.my_text_view, myList);

现在上下文是启动新Activity所需的内容,因为扩展ArrayAdapter的ListView适配器无法启动Activity,因为它不是从Activity类派生的。那么这就是你如何开始一个活动:

context.startActivity(context, GoToClass.class);

只需确保在代码中添加一个全局但私有的变量(private Context context)并将其添加到构造函数this.context = context中,如果创建对象,则必须放置MyListViewAdapter m = new MyListViewAdapter(CurrentClass.this, myListFullOfStrings); < / p>

答案 1 :(得分:0)

替换

 Intent moreIntent=new Intent(getContext(),SelectItemDesp.class);
              v.getContext().startActivity(moreIntent);

使用

Intent lObjIntent = new Intent(getApplicationContext(), SelectItemDesp.class);
startActivity(lObjIntent);
finish();

答案 2 :(得分:0)

我也在使用customlistview,并且在listview中也有一个删除按钮,我做了类似下面的事情,它对我有用。

有一件事我的课程扩展了ArrayAdapter

public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;

    if(convertView == null)
    {
        holder = new ViewHolder();

        convertView = inflater.inflate(R.layout.row_layout_mymedicine, null);


        holder.btnDelete = (Button)convertView.findViewById(R.id.btnDelete);

        holder.btnDelete.setOnClickListener(this);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder)convertView.getTag();
    }

    return convertView;
}

if(convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.row_layout_mymedicine, null); holder.btnDelete = (Button)convertView.findViewById(R.id.btnDelete); holder.btnDelete.setOnClickListener(this); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } return convertView; }

然后onClick()方法我做了

答案 3 :(得分:0)

您正在从匿名内部类调用新活动,this之类的内容只会引用此匿名类。

使用MyClass.this作为Vinayak建议,如果错误仍然存​​在,请在此处发布logcat

答案 4 :(得分:0)

试试这个。它应该工作

Intent intent = new Intent(context, SelectItemDesp.class);
                    context.startActivity(intent);