ArrayAdapter 的 getView 方法的 RecyclerView.Adapter 等价物是什么
What is RecyclerView.Adapter's equivalent for ArrayAdapter's getView method
我正在将 ScrollView
转换为 RecyclerView
。在我的一种方法中,我最初声明了这一点:
View item = listAdapter.getView(i, null, (ViewGroup) template);
listAdapter
本来是一个ArrayAdapter
,但我写了一个新的RecyclerView.Adapter
,现在声明为这样。我想知道如何重写上面的语句,因为 RecyclerView.Adapter
没有 getView
方法。
与RecyclerView不同,你管理RecyclerView.AdapterClass中的所有数据:
如果你用 ViewHolder 编写了 RecyclerView.Adapter,你可以得到 getView变成你写的RecyclerView.AdapterClass。
它在 onBindViewHolder 方法中
你只需要这样称呼它:
holder.itemView
这里是我写的一个RecyclerViewAdapter class例子,展示了如何调用itemView中的[=20] =]onBindViewHolder
我为 itemView 分配了一个 onItemClickListener,我还有 2 个 TextViews(在 ViewHolder底部)
public class SampleRecyclerAdapter extends RecyclerView.Adapter<SampleRecyclerAdapter.ViewHolder> {
private ArrayList<Order> orderList;
private LayoutInflater mLayoutInflater;
private Context context;
public SampleRecyclerAdapter(Context context, ArrayList<Order> orderList) {
this.orderList = orderList;
this.mLayoutInflater = LayoutInflater.from(context);
this.context = context;
}
@Override
public SampleRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(R.layout.recycler_item_order, parent, false);
return new SampleRecyclerAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(final SampleRecyclerAdapter.ViewHolder holder, int position) {
final Order order = orderList.get(position);
holder.date.setText(order.getFormattedDate()+", "+ order.getFormattedTime());
holder.orderNumber.setText(order.getUid());
//Here, calling itemView (equivalent of listAdapter.getView()) and setting a onClickListener as an example. You can do whatever you want.
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, OrderDetailActivity.class);
intent.putExtra("order", order);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return orderList.size();
}
//In the ViewHolder you declare all the components of your xml layout for you recyclerView items ( and the data is assigned in the onBindViewHolder, above)
class ViewHolder extends RecyclerView.ViewHolder {
private TextView date, orderNumber;
private ViewHolder(View itemView) {
super(itemView);
date = (TextView) itemView.findViewById(R.id.textViewDate);
orderNumber = (TextView) itemView.findViewById(R.id.textViewOrderNumber);
}
}
}
我正在将 ScrollView
转换为 RecyclerView
。在我的一种方法中,我最初声明了这一点:
View item = listAdapter.getView(i, null, (ViewGroup) template);
listAdapter
本来是一个ArrayAdapter
,但我写了一个新的RecyclerView.Adapter
,现在声明为这样。我想知道如何重写上面的语句,因为 RecyclerView.Adapter
没有 getView
方法。
与RecyclerView不同,你管理RecyclerView.AdapterClass中的所有数据:
如果你用 ViewHolder 编写了 RecyclerView.Adapter,你可以得到 getView变成你写的RecyclerView.AdapterClass。 它在 onBindViewHolder 方法中
你只需要这样称呼它:
holder.itemView
这里是我写的一个RecyclerViewAdapter class例子,展示了如何调用itemView中的[=20] =]onBindViewHolder 我为 itemView 分配了一个 onItemClickListener,我还有 2 个 TextViews(在 ViewHolder底部)
public class SampleRecyclerAdapter extends RecyclerView.Adapter<SampleRecyclerAdapter.ViewHolder> {
private ArrayList<Order> orderList;
private LayoutInflater mLayoutInflater;
private Context context;
public SampleRecyclerAdapter(Context context, ArrayList<Order> orderList) {
this.orderList = orderList;
this.mLayoutInflater = LayoutInflater.from(context);
this.context = context;
}
@Override
public SampleRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(R.layout.recycler_item_order, parent, false);
return new SampleRecyclerAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(final SampleRecyclerAdapter.ViewHolder holder, int position) {
final Order order = orderList.get(position);
holder.date.setText(order.getFormattedDate()+", "+ order.getFormattedTime());
holder.orderNumber.setText(order.getUid());
//Here, calling itemView (equivalent of listAdapter.getView()) and setting a onClickListener as an example. You can do whatever you want.
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, OrderDetailActivity.class);
intent.putExtra("order", order);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return orderList.size();
}
//In the ViewHolder you declare all the components of your xml layout for you recyclerView items ( and the data is assigned in the onBindViewHolder, above)
class ViewHolder extends RecyclerView.ViewHolder {
private TextView date, orderNumber;
private ViewHolder(View itemView) {
super(itemView);
date = (TextView) itemView.findViewById(R.id.textViewDate);
orderNumber = (TextView) itemView.findViewById(R.id.textViewOrderNumber);
}
}
}