1つのアダプタクラスで複数のRecyclerViewを使用します

Anga Koko :

私は3を持っているRecyclerView最も訪問された市場で、市場やお気に入りの市場近くを表示します。

私はの3差インスタンス作成したMarketAdapter3のクラスをRecyclerView

すべてが正常に動作しますが、私のActivity実装の1 OnClickListenerと私がクリックされたアダプタを把握傾けます。それはプログラムで決定することが可能であるAdapterから、クリックされたことをOnClickListener

ここに私は、 MarketAdapter Class

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

ArrayList<Markets> mMarket = new ArrayList<>();
Context mContext;
private final MarketsItemsClickListener mItemsClickListener;
private final MarketLongClickListener mLongClickListener;
private final MarketClickListener mClickListener;

public MarketAdapter(Context context, MarketsItemsClickListener itemsClickListener, MarketClickListener clickListener, MarketLongClickListener longClickListener){
    mContext = context;
    mItemsClickListener = itemsClickListener;
    mLongClickListener = longClickListener;
    mClickListener = clickListener;
}

public interface MarketLongClickListener{
    void onLongClick(int position);
}

public interface MarketClickListener{
    void onClick(int position);
}

public interface MarketsItemsClickListener{
    void imageViewOnClickListener(View view, int position);
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    Context context = viewGroup.getContext();
    int layoutForListItem = R.layout.list_market;
    LayoutInflater inflater = LayoutInflater.from(context);
    boolean shouldAttachToParentImmediately = false;

    View view = inflater.inflate(layoutForListItem, viewGroup, shouldAttachToParentImmediately);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    viewHolder.bindView(i);
}

@Override
public int getItemCount() {
    if(mMarket != null) return mMarket.size();
    return 0;
}

public void setData(ArrayList<Markets> markets){
    mMarket = markets;
    notifyDataSetChanged();
}

public void addData(Markets market, int position){
    mMarket.add(0, market);
    notifyDataSetChanged();
}

public Markets getItem(int position){return mMarket.get(position);}

class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener{

    ImageView mImageView;
    TextView mNameTextView, mCityTextView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        mImageView = itemView.findViewById(R.id.image_view);
        mNameTextView = itemView.findViewById(R.id.name_text_view);
        mCityTextView = itemView.findViewById(R.id.city_text_view);

        itemView.setOnLongClickListener(this);
        itemView.setOnClickListener(this);
    }

    void bindView(int position){
        Markets market = getItem(position);

        mCityTextView.setText(market.getCity());
        mNameTextView.setText(market.getName());
    }

    @Override
    public void onClick(View v) {
        //Get position of Adapter
        int position = getAdapterPosition();
        //Handle the click
        mClickListener.onClick(position);
    }

    @Override
    public boolean onLongClick(View v) {
        return false;
    }
}

}

以下とOnClickListenerからActivity

@Override
public void onClick(int position) {}
Pavneet_Singh:

あなたは、コンストラクタにタグを渡しとしてクリックを識別するために、クリックリスナーを経由してそのタグを取り戻すことができます

private final MarketsItemsClickListener mItemsClickListener;
private final MarketLongClickListener mLongClickListener;
private final MarketClickListener mClickListener;
private final String mTag;

public MarketAdapter(Context context, MarketsItemsClickListener itemsClickListener, MarketClickListener clickListener, MarketLongClickListener longClickListener, String tag){
    mTag = tag
    mContext = context;
    mItemsClickListener = itemsClickListener;
    mLongClickListener = longClickListener;
    mClickListener = clickListener;
}

リスナーを変更

public interface MarketClickListener{
    void onClick(int position, String tag);
}

そして活動のリスナーコードとして

@Override
public void onClick(int position, String tag) {
    switch(tag){
        case "adapter1":
        break;
        case "adapter2":
        break;
        case "adapter3":
        break;
    }
}

アダプタオブジェクトを作成します

 MarketAdapter adapter = new MarketAdapter("adapter1"....); 
 MarketAdapter adapter1 = new MarketAdapter("adapter2"....); 
 MarketAdapter adapter2 = new MarketAdapter("adapter3"....); 

そして、使用

mClickListener.onClick(position, mTag);

注意:あなたはうまくとして列挙型を使用することができます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196419&siteId=1