【问题标题】:onItemClick - Intent constructoronItemClick - 意图构造函数
【发布时间】:2015-07-29 13:20:23
【问题描述】:

我在编写这部分代码时遇到了一个错误:

ListView lv = (ListView) this.findViewById(R.id.toDoListView);
    lv.setAdapter(tdla);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent newIntent = new Intent(this, DisplayMessageActivity.class);//<--- Cannot resolve constructor
            newIntent.putExtra(EXTRA_MESSAGE, "TETTE");
            startActivity(newIntent);
        }
    });

我认为 Intent 构造函数应该与在链接到 Button 的简单函数中声明它相同:

public void sendMessage(View view){
    Intent newIntent = new Intent(this, DisplayMessageActivity.class);//<--- OK
    ...sth...
    startActivity(newIntent);
}

How to handle the click event in Listview in android? 也显示了一个类似的示例,但我无法弄清楚我缺少什么。

【问题讨论】:

    标签: android listview android-intent


    【解决方案1】:

    改变

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent newIntent = new Intent(this, DisplayMessageActivity.class);//<--- Cannot resolve constructor
    
        }
    });
    

    参加活动

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent newIntent = new Intent(getApplicationContext(), DisplayMessageActivity.class);
        }
    });
    

    对于片段

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent newIntent = new Intent(getActivity(), DisplayMessageActivity.class);
        }
    });
    

    【讨论】:

    • 谢谢!它适用于第一个。但是为什么在这种情况下我必须使用getApplicationContext() 而不是 Activity?
    • 你可以同时使用,getApplicationContext()返回一个上下文和activity.this也
    【解决方案2】:

    替换“这个”

    Intent newIntent = new Intent(yourActivity.this, DisplayMessageActivity.class);
    

    或用于片段

    Intent newIntent = new Intent(getActivity(), DisplayMessageActivity.class);
    

    【讨论】:

      【解决方案3】:

      改变你的意图:

      Intent newIntent = new Intent(this, DisplayMessageActivity.class);
      

      到这里:

      Intent newIntent = new Intent(YourActivity.this, DisplayMessageActivity.class);
      

      当您在任何点击监听器中使用意图时,请勿将“this”关键字与意图一起使用。

      【讨论】:

        【解决方案4】:

        您在 Itemclick 侦听器中,它没有上下文(没有 Activity)。

        Intent newIntent = new Intent(YourActivity.this, DisplayMessageActivity.class)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-04
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多