Java 单击可从RecycleView适配器启动活动

Java 单击可从RecycleView适配器启动活动,java,android,android-intent,android-activity,android-studio,Java,Android,Android Intent,Android Activity,Android Studio,我在从CardView适配器启动新活动时遇到问题,代码如下: RVAdapter adapter = new RVAdapter(array_restaurants); recList.setAdapter(adapter); 然后在适配器中。我设置了一个监听器 personName.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View

我在从CardView适配器启动新活动时遇到问题,代码如下:

RVAdapter adapter = new RVAdapter(array_restaurants);
recList.setAdapter(adapter);
然后在适配器中。我设置了一个监听器

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()

像这样使用它

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中强制转换上下文,而Acitivity可以这样做。

将活动对象传递给适配器,而不是上下文对象。 我看到你的密码了。 在这些行中替换此代码 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;
    }
第21行:活动mActivityContext;
第55-58行:RVAdapter(列出人员、活动mActivityContext){
这个人=人;
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;
}

这一部分解决了一个错误,但我的主要错误是,当我用Android Studio创建了一个新活动,创建了继承ActionBarActivity的新活动时,我更改了AppCompatActivity的ActionBarActivity,一切都重新正常了

尝试仅使用getApplicationContext()而不是v.GetContext。请显示日志cat结果。我无法访问v变量中的该方法,我如何访问该方法?嗨,我实现了您的代码,但我遇到了以下错误:非静态字段“context”无法从静态上下文引用,因此我将上下文转换为静态,但现在我在尝试启动活动时仍然收到此例外:unimagdalena.edu.co.restaurants I/Timeline﹕ 时间线:活动启动请求id:unimagdalena.edu.co.Restaurants时间:8967504 unimagdalena.edu.co.Restaurants W/dalvikvm﹕ threadid=1:线程以未捕获异常退出(group=0x41852ce0)您能否提供完整的代码..以便帮助我清楚地理解您的问题..MainActivity:Adapter:在创建上下文mContext之前全局编写此代码;并且mContext=这个内部onCreate还可以提供日志cat堆栈跟踪
  public Adaptador(List<Restaurant> restaurants, Context context) {
    this.restaurants = restaurants;
    this.context = context;
}
Intent intent = new Intent(context, RestaurantActivity.class);
context.startActivity(intent);