【问题标题】:How to use intent in baseadapter class如何在 baseadapter 类中使用意图
【发布时间】:2011-05-06 07:46:48
【问题描述】:

您好,我有一个用于自定义列表视图的基本适配器类。我的列表视图有一个按钮。当我按下该按钮时,我必须将控件重定向到另一个活动。当我使用 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 输出?错误堆栈?
  • 05-06 13:12:49.246: ERROR/AndroidRuntime(1416): android.util.AndroidRuntimeException: 从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?
  • 你可以使用 intent.setFlags(FLAG_ACTIVITY_NEW_TASK);我知道在适配器中这样做不是一个好习惯,因为您希望您的适配器只处理与 GUI 相关的操作,但是 some1 可以比我所说的更好地解释这一点

标签: android custom-lists


【解决方案1】:

我自己解决了这个问题。 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);


    }
}); }

【讨论】:

  • 你从哪里得到你的上下文对象?
【解决方案2】:

试试这个:

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

【讨论】:

    【解决方案3】:

    在 onClick 方法中使用 v.getContext() 代替 con

    【讨论】:

    • 但这并没有什么不同。
    【解决方案4】:

    这段代码对我有用,尤其是当您有 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);
                }
    

    【讨论】:

      【解决方案5】:

      通过构造函数传递上下文,然后使用这行代码:

          Intent intent=new Intent(context.getApplicationContext(), YourActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            context.getApplicationContext().startActivity(intent);
      

      谢谢:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 2012-09-22
        相关资源
        最近更新 更多