2016-10-11 4 views
3

Ich habe zwei Datensätze mit verschiedenen Adaptern innerhalb einer einzigen Aktivität und ich möchte notifyDataSetChanged() verwenden, aber es funktioniert nicht für den anderen Adapter. Also innerhalb meiner adapterFirst Klasse habe ich LongCLickListener, die notifyDataSetChanged() verwendet und ich möchte die adapterSecond anrufen, um auch zu benachrichtigen, wenn AdapterFirst aktualisiert wird. Die AdapterSecond Daten nicht aktualisiert wird beim Drücken LongClickRefreshing Werte von Recyclerview Adapter von einem anderen Adapter

public class AdapterFirst extends RecyclerView.Adapter <AdapterFirst .ViewHolder> { 

      private List<Object> objectList; 
      private Context mContext; 
      AdapterSecond adapterSecond; 

      public AdapteFirst(List<Object> list) { objectList= list; } 

      @Override 
      public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

       View view = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.item_list, parent, false); 
       return new ViewHolder(view); 
      } 

      @Override 
      public void onBindViewHolder(final ViewHolder holder, int position) { 

      holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 

        @Override 
        public boolean onLongClick(View v) { 
         //query method 
         notifyDataSetChanged(); //working 

         //here it gets the nullpointerexception error 
         adapterSecond = new AdapteSecond(); 
         adapterSecond.notifyDataSetChanged(); 
        } 
      }); 
     } 

     @Override 
      public int getItemCount() { 
       return (objectList != null? objectList.size():0); 
      } 

      public class ViewHolder extends RecyclerView.ViewHolder { 
       public TextView data; 

       public ViewHolder(View itemView) { 
        super(itemView); 
        data= (TextView) itemView.findViewById(R.id.text);   
       } 
      } 
     } 

AdapterSecond

public class AdapterSecond extends 
        RecyclerView.Adapter <AdapterSecond.ViewHolder> { 

     private List<Object> objectList; 
     private Context mContext; 

     public AdapterSecond() {} 

     public AdapterSecond (List<Object> list) { objectList= list; } 

     @Override 
     public AdapterSecond.ViewHolder onCreateViewHolder(ViewGroup parent, 
         int viewType) { 
      View view = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.item_list_2, parent, false); 
      return new ViewHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(final AdapterSecond.ViewHolder holder, int position) { 

      final Object object = objectList.get(holder.getAdapterPosition()); 
      holder.data2.setText(object.getData()); 

     }  
     @Override 
     public int getItemCount() { 
      return (objectList != null? objectList.size():0); 
     } 

     public class ViewHolder extends RecyclerView.ViewHolder { 
      public TextView data2; 

      public ViewHolder(View itemView) { 
       super(itemView); 
       data2= (TextView) itemView.findViewById(R.id.text2); 
      } 
     } 
    } 
+0

post den ganzen Code PLZ –

+0

@HeshanSandeepa aktualisiert den Code – BXUMZSE

+0

können Sie das Protokoll auch veröffentlichen –

Antwort

0

scheint, wie die Reihenfolge der Initialisierung der Adapter einige Probleme haben.

einfach sicher, dass Sie den secondAdapter vor dem firstAdapter

secondAdapter= new SecondAdapter(); 
firstAdapter = new FirstAdapter(); 

einfach die Reihenfolge überprüfen initialisieren, in dem sie initialisiert werden!

Verwandte Themen