首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在android中动态添加和删除不同的viewholders (比如2个viewholders)?

在Android中动态添加和删除不同的ViewHolders可以通过RecyclerView来实现。RecyclerView是Android提供的一个强大的视图容器,用于展示大量数据集合,并支持灵活的布局和交互。

要动态添加和删除不同的ViewHolders,首先需要创建不同的ViewHolder类来适配不同的布局。通常情况下,我们会创建一个基类ViewHolder,然后派生出不同的子类ViewHolder来适配不同的布局。

以下是一个示例代码,演示如何在Android中动态添加和删除两个不同的ViewHolders:

  1. 首先,在布局文件中定义RecyclerView:
代码语言:xml
复制
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 创建两个不同的ViewHolder类,分别用于不同的布局:
代码语言:java
复制
public class ViewHolder1 extends RecyclerView.ViewHolder {
    // ViewHolder1的布局元素
    public TextView textView1;

    public ViewHolder1(View itemView) {
        super(itemView);
        textView1 = itemView.findViewById(R.id.textView1);
    }
}

public class ViewHolder2 extends RecyclerView.ViewHolder {
    // ViewHolder2的布局元素
    public TextView textView2;

    public ViewHolder2(View itemView) {
        super(itemView);
        textView2 = itemView.findViewById(R.id.textView2);
    }
}
  1. 创建一个RecyclerView.Adapter类来管理数据和ViewHolder:
代码语言:java
复制
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int VIEW_TYPE_1 = 1;
    private static final int VIEW_TYPE_2 = 2;

    private List<Object> dataList;

    public MyAdapter(List<Object> dataList) {
        this.dataList = dataList;
    }

    @Override
    public int getItemViewType(int position) {
        // 根据位置返回不同的布局类型
        if (dataList.get(position) instanceof Object1) {
            return VIEW_TYPE_1;
        } else if (dataList.get(position) instanceof Object2) {
            return VIEW_TYPE_2;
        }
        return super.getItemViewType(position);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 根据布局类型创建不同的ViewHolder
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        if (viewType == VIEW_TYPE_1) {
            View view1 = inflater.inflate(R.layout.item_layout_1, parent, false);
            return new ViewHolder1(view1);
        } else if (viewType == VIEW_TYPE_2) {
            View view2 = inflater.inflate(R.layout.item_layout_2, parent, false);
            return new ViewHolder2(view2);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        // 根据位置绑定数据到对应的ViewHolder
        if (holder instanceof ViewHolder1) {
            Object1 object1 = (Object1) dataList.get(position);
            ViewHolder1 viewHolder1 = (ViewHolder1) holder;
            viewHolder1.textView1.setText(object1.getData());
        } else if (holder instanceof ViewHolder2) {
            Object2 object2 = (Object2) dataList.get(position);
            ViewHolder2 viewHolder2 = (ViewHolder2) holder;
            viewHolder2.textView2.setText(object2.getData());
        }
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }
}
  1. 在Activity或Fragment中使用RecyclerView和Adapter:
代码语言:java
复制
public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    private List<Object> dataList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        dataList = new ArrayList<>();
        // 添加数据对象到dataList中,可以是Object1或Object2的实例

        adapter = new MyAdapter(dataList);
        recyclerView.setAdapter(adapter);
    }

    // 动态添加一个ViewHolder1
    private void addViewHolder1() {
        Object1 object1 = new Object1("Data for ViewHolder1");
        dataList.add(object1);
        adapter.notifyItemInserted(dataList.size() - 1);
    }

    // 动态添加一个ViewHolder2
    private void addViewHolder2() {
        Object2 object2 = new Object2("Data for ViewHolder2");
        dataList.add(object2);
        adapter.notifyItemInserted(dataList.size() - 1);
    }

    // 动态删除最后一个ViewHolder
    private void removeLastViewHolder() {
        if (dataList.size() > 0) {
            dataList.remove(dataList.size() - 1);
            adapter.notifyItemRemoved(dataList.size());
        }
    }
}

通过调用addViewHolder1()addViewHolder2()removeLastViewHolder()方法,可以动态添加和删除不同的ViewHolders。

这样,就实现了在Android中动态添加和删除不同的ViewHolders的功能。根据实际需求,可以根据不同的布局类型创建不同的ViewHolder,并通过RecyclerView.Adapter来管理数据和ViewHolder的绑定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券