【问题标题】:listview inside listview with firebase on androidandroid上带有firebase的listview里面的listview
【发布时间】:2018-03-29 16:19:55
【问题描述】:

我正在尝试从 firebase 创建数据的列表视图。每个项目都有一个TextView 和一个ImageView。

我也希望每次单击TextView 以输入与此项目以某种方式关联的新ListView。第二个列表还包含带有TextView 和ImageButton 的项目(每次我根据其类型更新列表时)。

问题在于,我无法理解如何在TextView 和ImageView 之间分离OnClickItemView 的实现。

这是我的适配器:

public class Adapter extends BaseAdapter {

    Activity activity;
    List <ObjectItem> items;
    LayoutInflater inflater;

    public Adapter(Activity activity) {
        this.activity = activity;
    }

    public Adapter(Activity activity, List<HistoryItem> items) {
        this.activity = activity;
        this.items = items;
        inflater= activity.getLayoutInflater();
    }

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

    @Override
    public Object getItem(int i) {
        return i;
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

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

    @Override
    public View getView(final int position, View view, ViewGroup viewGroup) {
        ViewHolder holder = null;

        if (view == null){
            view = inflater.inflate(R.layout.history_item, viewGroup, false);
            holder = new ViewHolder();
            holder.txtMsg = (TextView)view.findViewById(R.id.txt);
            holder.btn = (ImageButton) view.findViewById(R.id.btn);
            view.setTag(holder);
        } else
            holder = (ViewHolder)view.getTag();

        ObjectItem item = items.get(position);
        holder.txtMsg.setText(item.getTxt());

        if(item.type().equals("LIST_1")){
            holder.btn.setBackgroundResource(R.drawable.save);
        } else {
            holder.btn.setBackgroundResource(R.drawable.check);
        }

        return view;
    }

    public void updateRecords(List<HistoryItem> items){
        this.items = items;
        notifyDataSetChanged();
    }

    class ViewHolder {
        TextView txtMsg;
        ImageView btn;
    }
}

【问题讨论】:

    标签: android listview firebase adapter


    【解决方案1】:

    您需要根据适配器的getItemViewType 函数返回的ViewType 实现多个ViewHolder。这是一个实现in github,供您理解。

    该实现显示两个不同的列表将填充到单个RecyclerView 中。您可能会考虑在这里实现相同的想法。只需根据传递给适配器的列表中的项目返回一个单独的视图类型。

    另一方面,如果您正在考虑为您的onClickItemView 函数实现不同的实现,您可能通过在您的TextView 或ImageView 上实现onClickListener 来获得相同的行为。在getView 函数内的代码中,您可以考虑在检查设置按钮背景的条件时单独实现onClickListener。

    if(item.type().equals("LIST_1")){
        holder.btn.setBackgroundResource(R.drawable.save);
        holder.txtMsg.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Your implementation here
            }
        });
    } else {
        holder.btn.setBackgroundResource(R.drawable.check);
        holder.btn.setBackgroundResource(R.drawable.save);
        holder.txtMsg.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Separate implementation here
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2015-07-28
      • 2017-06-24
      • 2019-08-10
      相关资源
      最近更新 更多