gpt4 book ai didi

android - 具有动态数量的 TextView 的 GridView

转载 作者:行者123 更新时间:2023-11-29 23:23:34 24 4
gpt4 key购买 nike

我正在尝试创建一个 GridView,每个项目都有动态数量的 TextView

这是我想要的模型:

|-----------------|
| Text | Text |
| | Text |
|-----------------|
| Text | Text |
| Text | |
| Text | |
|-----------------|
| Text | Text |
| Text | Text |
|-----------------|

请注意,如果 TextView 中的每个 GridView 项目都有一个动态编号,具体取决于从我的 API 返回的数据。

我的问题是,如何修改下面的代码,以便为每个要添加到 GridView 项目中的文本填充一个 TextView

这是我用来调用适配器的代码(删除了不相关的代码):

private GridView gridView;

// Create a map to hold the text for each GridView item
// The Integer is simply the section number
private List<Map<Integer, List<String>>> items = new ArrayList<>();

// Get the GridView view
gridView = findViewById(R.id.grid_view);

// Add sample items to the list
Map<Integer, List<String>> map = new HashMap<>();
map.put(1, Collections.singletonList("Item 1"));

Map<Integer, List<String>> map2 = new HashMap<>();
map2.put(2, Arrays.asList("Item 1", "Item 2"));

Map<Integer, List<String>> map3 = new HashMap<>();
map3.put(3, Arrays.asList("Item 1", "Item 2", "Item 3"));

Map<Integer, List<String>> map4 = new HashMap<>();
map4.put(4, Collections.singletonList("Item 1"));

// Add the items to the list
items.add(map);
items.add(map2);
items.add(map3);
items.add(map4);

// Initialize the adapter
GridViewAdapter gridViewAdapter = new GridViewAdapter(getContext(), items);
gridView.setAdapter(gridViewAdapter);

这是我的 GridView 适配器:

public class GridViewAdapter extends BaseAdapter {

private final Context mContext;
private final List<Map<Integer, List<String>>> items;
private LayoutInflater layoutInflater;

public GridViewAdapter(Context context, List<Map<Integer, List<String>>> items) {
this.mContext = context;
this.items = items;
layoutInflater = LayoutInflater.from(mContext);
}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;

Map<Integer, List<String>> item = items.get(position);

if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.gridview_item, parent, false);

viewHolder = new ViewHolder();

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

for (Map.Entry<Integer, List<String>> entry : item.entrySet()) {
Integer key = entry.getKey();
List<String> values = entry.getValue();

// For each value, inflate a TextView layout...
for (String value : values) {
// What goes here?
// How do I inflate the TextView layout (shown below) for each value and add it to the parent view?
}
}

return convertView;
}

static class ViewHolder {
// What goes here?
}

}

这是我的 gridview_item 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

</LinearLayout>

最后,这是我要膨胀并添加到上面布局的 gridview_textview 布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

我将如何实现这一点以及代码会是什么样子?

最佳答案

我建议使用 RecyclerViewGridLayoutManager而不是 GridView .

无论哪种情况,您都希望您的 ViewHolder 执行以下操作(我很难模拟代码,所以我只打算编写步骤:

  • 你的 ViewHolder 会膨胀一个 gridview_item布局并获取对 LinearLayout 的引用。
  • 你会在你的viewholder上有一个像bindStrings(List<String> strings)这样的方法这将为每个人膨胀一个 TextView 。

代码如下所示:

public void bindStrings(List<String> strings) {
Context context = myItemView.getContext();
LinearLayout parentLayout = (LinearLayout) myItemView;

for(String item : strings) {
TextView textView = TextView(context);
textView.setText(item);
parentLayout.addView(textView);
}
}

关于android - 具有动态数量的 TextView 的 GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875194/

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