Recyclerview中的开关案例出现问题,因为它在筛选项目时打开了错误的活动



我在RecyclerView中使用了一个开关案例来打开不同的Activity。当项目未被筛选时,它可以完美地工作。但当项目被过滤时,项目显示错误的Activitys。我认为这是因为当项目被筛选时,它们占据了更高的位置。我不知道该怎么解决这个问题。

public void onItemClick(int position)  {
switch (position ){
case 0:
Intent pope = new Intent(this, Pope.class);
startActivity(pope);
break;
case 1:
Intent austin = new Intent(this, AlfredAustine.class);
startActivity(austin);
break;
case 2:
Intent housman = new Intent(this, AlfredHousman.class);
startActivity(housman);
break;
case 3:
Intent tennyson = new Intent(this, LordTennyson.class);
startActivity(tennyson);
break;
case 4:
Intent swinburn = new Intent(this, AlgernonSwinburn.class);
startActivity(swinburn);
break;
case 5:
Intent lang = new Intent(this, AndrewLang.class);
startActivity(lang);
break;
}
}

看起来您在项目位置上使用了一个开关案例。修改适配器时,这可能会导致问题。当您"过滤"适配器时(无论您如何实现它(,项的位置可能会发生变化,这将导致您的交换机无法按预期工作。

考虑对项的参数使用开关大小写,或者如果必须使用position,则将该位置存储在项对象中,而不是依赖于适配器位置。

这看起来像是一个软件设计问题。这就是我解决问题的方法。在适配器中,您可能有一个型号列表。类似这样的东西:

List<MyModel> modelList = new ArrayList<>();

因此,在MyModel类中,您应该为模型定义一个id。E.E:

public class MyModel {
@NonNull
private int id;
....
} 

然后开关将类似于:

public void onItemClick(int position)  {

switch (models.get(position).getId()){
case POPE_ID:
Intent pope = new Intent(this, Pope.class);
startActivity(pope);
break;
case ALFRED_ID:
Intent austin = new Intent(this, AlfredAustine.class);
startActivity(austin);
break;
case ALFRED_HOUSMAN_ID:
Intent housman = new Intent(this, AlfredHousman.class);
startActivity(housman);
break;
.....
}
}

最新更新