2

可以爲不同的視圖寫通用適配器嗎?我對通用適配器recyclerViewspinner感興趣。在我的項目中,我有RecyclerView和Spinner,我想爲兩者編寫基本通用適配器(RecyclerViewSpinner) 您能幫我嗎?微調器和回收器的通用適配器查看

回答

6

是的,你可以實現ListView/SpinnerRecyclerView

public static class CommonAdapter extends RecyclerView.Adapter<CommonAdapter.RecycleViewHolder> 
      implements ListAdapter { 


     private Context mContext; 
     private List<String> data; 

     public CommonAdapter(Context context, List<String> data) { 
      mContext = context; 
      this.data = data; 
     } 

     // Start of recycleview adapter 
     @Override 
     public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      return new RecycleViewHolder(new TextView(mContext)); 
     } 

     @Override 
     public void onBindViewHolder(RecycleViewHolder holder, int position) { 
      holder.textView.setText(data.get(position)); 
     } 

     @Override 
     public int getItemCount() { 
      return getCount(); 
     } 

     public static class RecycleViewHolder extends RecyclerView.ViewHolder { 

      public TextView textView; 

      public RecycleViewHolder(View itemView) { 
       super(itemView); 
       textView = (TextView) itemView; 
      } 
     } 

     // Implementation of list adapter(Spinner/ListView) 
     @Override 
     public boolean areAllItemsEnabled() { 
      return true; 
     } 

     @Override 
     public boolean isEnabled(int position) { 
      return true; 
     } 

     @Override 
     public void registerDataSetObserver(DataSetObserver observer) { 

     } 

     @Override 
     public void unregisterDataSetObserver(DataSetObserver observer) { 

     } 

     @Override 
     public int getCount() { 
      return data.size(); 
     } 

     @Override 
     public String getItem(int position) { 
      return data.get(position); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      SpinnerViewHolder holder; 
      if (convertView == null) { 
       convertView = new TextView(mContext); 
       holder = new SpinnerViewHolder(); 
       holder.textView = (TextView) convertView; 
       convertView.setTag(holder); 
      } else { 
       holder = (SpinnerViewHolder) convertView.getTag(); 
      } 
      holder.textView.setText(getItem(position)); 
      return convertView; 
     } 

     @Override 
     public int getViewTypeCount() { 
      return 0; 
     } 

     @Override 
     public boolean isEmpty() { 
      return false; 
     } 

     public static class SpinnerViewHolder { 
      public TextView textView; 
     } 

    } 

一個共同的適配器,這是做這件事的基本理念,您可以genirify更要使用同一個適配器的所有不同ListView/RecyclerView也有不同的數據類型。但截至目前,我正在給出組合適配器的基本概念。

適配器延伸其通過RecyclerView所需的RecyclerView.ViewHolder和我在執行相同的類ListAdapter其通過ListView/Spinner必需的。

+0

非常棒!謝謝 – Sky

相關問題