gpt4 book ai didi

android - 创建通用基础适配器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:29 26 4
gpt4 key购买 nike

我有兴趣创建一个通用的 BaseAdapter,它将应用于具有任何 list_item 的任何 ListView。它将为 list_view 设置 item_row。

    public class GenericAdapter extends BaseAdapter
{

Context context;

ArrayList<HashMap<String, String>> list;

LayoutInflater inflater;

public GenericAdapter (Context context, ArrayList<HashMap<String, String>> list)
{
this.context = context;

this.list = list;

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

@Override
public Object getItem(int position)
{
return list.get(position);
}

@Override
public long getItemId(int position)
{
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;

if(view == null)
{
view = inflater.inflate(R.layout.item_of_any_list, parent, false);

// i have to do something here like there may be a method which must be call

}

/*HashMap<String, String> map = list.get(position);

TextView textViewName = (TextView) view.findViewById(R.id.name);

TextView textViewDate = (TextView) view.findViewById(R.id.date);

//TextView textViewDesc = (TextView) view.findViewById(R.id.desc);

textViewName.setText(map.get("name"));

textViewDate.setText(map.get("date"));

//textViewDesc.setText(map.get("description"));
*/
return view;
}

我想我必须创建一个接口(interface),用于获取和设置单个项目的 item_row。但我不知道这是否可能。有人可以告诉我如何实现它。

我的想法是创建一个接口(interface),然后 GenericAdapter 实现该接口(interface)。在该接口(interface)中有一个方法来获取和设置 item_row。任何扩展 GenericAdapter 的类都必须实现该方法。它将帮助我们制作通用适配器。

当我们扩展该适配器时,我们不需要编写所有代码,如 getCount、getItem、getItemId,我们只需要重写一个用于 inflateLayout 的函数。必须在 getView 里面

提前致谢

最佳答案

两年后回答我自己的问题。

为了制作通用适配器,您需要父类中的抽象方法,这些方法应该由子类实现.因此 GenericAdapter 必须是 Abstract 并为要更改的数据创建 abstract 方法。

我有不同类型的 ArrayList 要在 Adapter 中显示,只是它的 model class 不同。所以我决定写一个genericAdapter。这是用于 recyclerview 如果有人 interested ListView 。让我知道。

通用适配器

public abstract class GenericAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context context;
private ArrayList<T> items;

public abstract RecyclerView.ViewHolder setViewHolder(ViewGroup parent);

public abstract void onBindData(RecyclerView.ViewHolder holder, T val);

public GenericAdapter(Context context, ArrayList<T> items){
this.context = context;
this.items = items;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = setViewHolder(parent);
return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
onBindData(holder,items.get(position));
}

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

public void addItems( ArrayList<T> savedCardItemz){
items = savedCardItemz;
this.notifyDataSetChanged();
}

public T getItem(int position){
return items.get(position);
}
}

我用它就像

     adapter = new GenericAdapter<DataModel>(context,modelList) {
@Override
public RecyclerView.ViewHolder setViewHolder(ViewGroup parent) {
final View view = LayoutInflater.from(context).inflate(R.layout.item_view_holder, parent, false);
ItemViewHolder viewHolder = new ItemViewHolder(context, view);
return viewHolder;
}

@Override
public void onBindData(RecyclerView.ViewHolder holder1, DataModel val) {
DataModel userModel = val;

ItemViewHolder holder = (ItemViewHolder)holder1;
holder.name.setText(userModel.getName());
holder.fatherName.setText(userModel.getFatherName());
}
};
mRecyclerView.setAdapter(adapter);

RecyclerView with Search sort functionality

关于android - 创建通用基础适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24572081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com