如何在BaseAdapter类中使用Intent

3

你好,我有一个自定义列表视图的基础适配器类。我的列表视图上有一个按钮,当我按下该按钮时,我需要将控制权重定向到另一个活动。当我使用Intent进行重定向时,在运行时会显示错误。以下是我的代码:

public View getView(final int position, View convertView, ViewGroup parent) 
{

    convertView = mInflater.inflate(R.layout.listview_elements, null);

    TextView textview1 = (TextView) convertView.findViewById(R.id.TextView01);
    TextView textview2 = (TextView) convertView.findViewById(R.id.TextView02);
    TextView textview3 = (TextView) convertView.findViewById(R.id.TextView03);
    Button buy=(Button)convertView.findViewById(R.id.buy_song_button);
    buy.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

        Intent intent=new Intent(con,MainActivity.class);
        con.startActivity(intent);


        }
    }); }

如何从我的基础适配器类重定向到另一个活动?

日志输出(logcat)是什么?错误栈(error stack)是什么? - sat
05-06 13:12:49.246: ERROR/AndroidRuntime(1416): android.util.AndroidRuntimeException: 在Activity上下文之外调用startActivity()需要使用FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗? - Andro Selva
你可以使用intent.setFlags(FLAG_ACTIVITY_NEW_TASK);。我知道在Adapter中这样做不是一个好的实践,因为你希望你的Adapter只处理与GUI相关的操作,但有人可以比我更好地解释这一点。 - chaitanya
5个回答

15

我已经自己解决了这个问题。在Intent中进行了简单的修改就解决了它。 我不得不为我的Intent设置标志,就这样。

public View getView(final int position, View convertView, ViewGroup parent) 
     {

convertView = mInflater.inflate(R.layout.listview_elements, null);

TextView textview1 = (TextView) convertView.findViewById(R.id.TextView01);
TextView textview2 = (TextView) convertView.findViewById(R.id.TextView02);
TextView textview3 = (TextView) convertView.findViewById(R.id.TextView03);
Button buy=(Button)convertView.findViewById(R.id.buy_song_button);
buy.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

    Intent intent=new Intent(context,MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);


    }
}); }

1
你从哪里获取上下文对象? - spagi

2
尝试这个:

  Intent intent=new Intent(activity.getApplicationContext(),MyPlace.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("city", "Yangon");
    activity.getApplicationContext().startActivity(intent);

1

在 onClick 方法中使用 v.getContext() 而不是 con。


但这并没有任何区别。 - Andro Selva

1
这段代码对我很有帮助,特别是当您拥有用于GridView适配器的基本适配器类时。
cmnt_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e("position",position+"");
                Intent comment_page=new Intent(view.getContext(),comments_page.class);
                comment_page.putExtra("position",position);
                view.getContext().startActivity(comment_page);
            }

1
通过构造函数传递上下文,然后只需使用以下代码即可:
    Intent intent=new Intent(context.getApplicationContext(), YourActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
      context.getApplicationContext().startActivity(intent);

感谢 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接