-1

In meinem Projekt und inklusive Recyclerview und Karten ist das Problem, wenn ich Aktivitäten für jede der Karten aufrufen möchte. Ich versuche schon andere Mittel, aber ich kann mein Problem nicht lösen.RecyclerView mit Karten. Öffnen Sie neue Aktivität für jede Karten

RVAdapter.java

package com.example.ivann.card2; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.List; 

/** 
* Created by ivann on 15/03/2017. 
*/ 

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> { 
    private Context context; 

    public RVAdapter(Context context){ 
     this.context = context; 
    } 
    public class PersonViewHolder extends RecyclerView.ViewHolder { 
     CardView cv; 
     TextView personName; 
     TextView personAge; 
     ImageView personPhoto; 

     public PersonViewHolder(View itemView) { 
      super(itemView); 
      cv = (CardView)itemView.findViewById(R.id.cv); 
      personName = (TextView)itemView.findViewById(R.id.person_name); 
      personAge = (TextView)itemView.findViewById(R.id.person_age); 
      personPhoto = (ImageView)itemView.findViewById(R.id.person_photo); 


    //Problem 
      itemView.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View v) { 

        final Intent intent; 
        if (getAdapterPosition() == 0){ 
         intent = new Intent(context, LaveryActivity.class); 
        } else if (getAdapterPosition() == 1){ 
         intent = new Intent(context, emma.class); 
        } else { 
         intent = new Intent(context, lilie.class); 
        } 
        context.startActivity(intent); 
       } 
      }); 

     } 
    } 

    List<Person> persons; 

    RVAdapter(List<Person> persons){ 
     this.persons = persons; 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    @Override 
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); 
     PersonViewHolder pvh = new PersonViewHolder(v); 
     return pvh; 
    } 

    @Override 
    public void onBindViewHolder(PersonViewHolder personViewHolder, int i) { 
     personViewHolder.personName.setText(persons.get(i).name); 
     personViewHolder.personAge.setText(persons.get(i).age); 
     personViewHolder.personPhoto.setImageResource(persons.get(i).photoId); 
    } 

    @Override 
    public int getItemCount() { 
     return persons.size(); 
    } 
} 

CardViewActivity.java

package com.example.ivann.card2; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.TextView; 


public class CardViewActivity extends Activity{ 

    TextView personName; 
    TextView personAge; 
    ImageView personPhoto; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.cardview_activity); 
     personName = (TextView)findViewById(R.id.person_name); 
     personAge = (TextView)findViewById(R.id.person_age); 
     personPhoto = (ImageView)findViewById(R.id.person_photo); 

     personName.setText("Emma Wilson"); 
     personAge.setText("23 years old"); 
     personPhoto.setImageResource(R.drawable.emma); 
    } 
} 

Log

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.ivann.card2, PID: 13042 
       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
        at android.content.ComponentName.<init>(ComponentName.java:128) 
        at android.content.Intent.<init>(Intent.java:4868) 
        at com.example.ivann.card2.RVAdapter$PersonViewHolder$1.onClick(RVAdapter.java:44) 
        at android.view.View.performClick(View.java:5610) 
        at android.view.View$PerformClick.run(View.java:22265) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Application terminated. 
+0

Das 'itemView.setOnClickListener' gut aussieht. Warum hast du es kommentiert? –

Antwort

0

Gerade uncomment diese Zeilen. So sollte es gemacht werden.

itemView.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(v.getContext(), LaveryActivity.class); 
     v.getContext().startActivity(intent); 
}); 
+0

Es funktioniert nicht, ich kann nicht direkt aufrufen intent intent = new Intent (v.getContext(), LaveryActivity.class); Ich benutze RecyclerView. –

0

Ihre cardview clicklistener in onBindViewHolder sein sollte()

Context context; //Declare globally 

    personViewHolder.cv.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View v) { 

    Intent i =new Intent(context, LaveryActivity.class); 
        context.startActivity(i); 

       } 
      }); 
0

Eigentlich kann man Intent direkt von RecyclerView Adapter rufen .....

entfernen addOnItemTouchListener von Recyclerview von Ihrer Aktivität beide werden nicht zusammen arbeiten ......

In dir Activity ..

RVAdapter adapter = new RVAdapter(persons,RecyclerViewActivity.this); 
rv.setAdapter(adapter); 

Try Aktivitätsobjekt in Adapter-Konstruktor zu übergeben.

RVAdapter(List<Person> persons,Activity activity){ 
     this.persons = persons; 
     this.activity=activity; 
    } 

Und gehen mit itemView clicklistener aber in onBindViewHolder()

itemView.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(activity, LaveryActivity.class); 
     activity.startActivity(intent); 
});