我有一个问题,从CardView适配器开始一个新的活动,这是代码:
RVAdapter adapter = new RVAdapter(array_restaurants);
recList.setAdapter(adapter);
在适配器中。我设置了OnClickListener
personName.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Context context = v.getContext();
System.out.println("Context");
System.out.println(context.toString());
Intent intent = new Intent(v.getContext(), Restaurante.class);
v.getContext().startActivity(intent);
}
});
当我在控制台中打印上下文时,一切看起来都很好,但在应用程序停止工作之后。为什么?
传递您在其中设置适配器的活动的上下文
Context mContext;
//write this line in oncreate
mContext=this;
RVAdapter adapter = new RVAdapter(array_restaurants,mContext);
recList.setAdapter(adapter);
那么在你的适配器类中使用这个上下文来代替v.getContext()
Context context;
RVAdapter(your array,Context mContext)
{
context=mContext;
}
,像
一样使用personName.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("Context");
System.out.println(context.toString());
Intent intent = new Intent(context, Restaurante.class);
context.startActivity(intent);
}
});
它可能会要求在startActivity与activity中转换上下文你可以这样做
将Activity对象传递给适配器而不是Context对象。我看到你的代码了。替换以下几行代码MainActivity.java
Line 68: RVAdapter adapter = new RVAdapter(restaurantes, MainActivity.this);
RVAdapter.java
Line 21: Activity mActivityContext;
Line 55-58: RVAdapter(List<Restaurante> persons, Activity mActivityContext) {
this.persons = persons;
this.mActivityContext= mActivityContext;
}
希望这能解决你的问题
经过很多时间我找到了答案,那些人提交的答案帮助我找到了主要问题,这就是解决方案
在MainActivity中,我添加了一个新参数,并将活动传递给适配器,如@Meenal Sharma和@ch3tan建议
RVAdapter adapter = new RVAdapter(restaurantes, this);
在适配器
public Adaptador(List<Restaurant> restaurants, Context context) {
this.restaurants = restaurants;
this.context = context;
}
和创建意图:
Intent intent = new Intent(context, RestaurantActivity.class);
context.startActivity(intent);
那部分解决了一个错误,但主要的错误,我有,当我创建一个新的活动与Android工作室,创建ActionBarActivity的新活动继承,我改变ActionBarActivity为AppCompatActivity,一切又工作了…