【问题标题】:Android - exit activity on item click in recycler viewAndroid - 在回收站视图中单击项目时退出活动
【发布时间】:2017-07-25 13:17:02
【问题描述】:

我的 RecyclerView 中有一堆列表项。我正在正确处理每个项目的点击,但是当点击任何项目时我需要关闭活动。因为 RecyclerView 没有setOnItemClickListener 方法,所以我必须在适配器中执行此操作:

@Override
public void onBindViewHolder(final Holder holder, int position) {
    // ...

    holder.flagNameTextView.setText(arrayList.get(position).getName());

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Go back to the previous activity
            // such as onBackPressed();
        }
    });
}

当然,适配器并没有扩展Activity,所以我不能使用onBackPressed()finish()

我该怎么做?

【问题讨论】:

  • @Prajnan Bhuyan 是的,但是就像我在问题中所说的那样,我不能使用 finish() 方法,因为单击位于未扩展 Activity 类的适配器内。
  • 在适配器的构造函数中传递上下文对象,并在您希望完成活动的任何地方调用 context.finish() See this
  • @Prajan 你不能从适配器类@Milan 调用完成你需要从适配器中“提取”点击事件并从活动中设置它......这已经在几个地方得到解决

标签: android list android-activity android-recyclerview exit


【解决方案1】:

使用以下内容:

全局声明上下文。

Context c;

然后用你的活动类型转换上下文。

((YourActivity)c).finish();

希望这会有所帮助。

【讨论】:

  • 将适配器耦合到活动是一个坏主意
  • @cricket_007 为什么这是个坏主意?你有什么建议?
  • 应该 getActivity() 改善这种情况吗?
  • @Milan 查看我标记的副本
【解决方案2】:

您可以将您的活动的引用传递给适配器构造函数并调用 Activity.finish();

希望对您有所帮助。

对不起我的英语。

【讨论】:

    【解决方案3】:

    您可以从flagNameTextView 获取上下文:

    ((Activity)holder.flagNameTextView.getContext()).finish();  
    

    【讨论】:

      【解决方案4】:

      只需使用 YourActivityName.this.finish()。

      通过添加 Activity 名称,您可以告诉 android 您想要哪个“this”。

      这仅在您的适配器未定义为静态类时才有效。

      【讨论】:

        【解决方案5】:

        此外,您可以在 RecyclerView 适配器中定义类似 OnClickListener 的接口回调。然后在Activity中实现这个接口,传入adapter,然后在View的OnClickListner回调中使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多