单击时从RecycleView Adapter启动活动

时间:2015-05-28 04:35:18

标签: java android android-intent android-activity android-studio

我在从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);
            }
        });

当我在控制台中打印上下文时,一切看起来都很好,但是在应用程序停止工作之后。为什么呢?

非常感谢。

3 个答案:

答案 0 :(得分:0)

传递您已设置适配器的活动的上下文

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中使用Acitivity来强制转换上下文。

答案 1 :(得分:0)

将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;
    }

希望这能解决你的问题。

答案 2 :(得分:0)

经过很长一段时间我找到了答案,那些人提交的答案帮助我找到了主要问题,这就是解决方案

在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);

那部分解决了一个错误,但我遇到的主要错误是,当我创建了一个新的活动,创建了继承ActionBarActivity的新活动的Android Studio时,我改变了AppCompatActivity的ActionBarActivity,一切都恢复了......