【发布时间】:2016-01-26 14:58:59
【问题描述】:
我正在为 Tablayout 使用嵌套的 ArrayList。 ArrayList 的每个元素填充每个选项卡。选项卡计数根据父数组列表的大小而变化。例如当父 ArrayList 的大小为 2 时,制表符计数为 2;当 size 3 tab count 3..etc..为了解释这种情况很困难,我准备了解释图像..
图片 1
此图片代表一般外观。我想用 ArrayLists 每个元素填充这个 TextViews
图片 2
这张图片代表我的数据类型; 键和值 ArrayList 是嵌套的arraylist,它们在每个索引中都包含arraylist。
图 3 - 图 4 - 图 5
这些图像代表了 tabLayouts 过去的样子。我希望我的数据看起来像这些图像。
所以问题是 PopUpDetailsAdapterPlanT 类;
当我在每行下方使用代码时,会填充相同的项目。对于此示例,每一行都写入 ArrayList 的最后一个元素 (Location - Minnesota) 我该如何处理这个问题。感谢您的帮助
public class PopUpDetailsAdapterPlanT extends ArrayAdapter {
Context context;
private ArrayList<ArrayList<Object>> keys;
private ArrayList<ArrayList<String>> values;
public PopUpDetailsAdapterPlanT(Context context, ArrayList<ArrayList<Object>> keys, ArrayList<ArrayList<String>> values) {
super(context,R.layout.popupdetails_listview_simpleitem);
this.keys = keys;
this.values = values;
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.popupdetails_listview_simpleitem, null);
}
TextView tv1 = (TextView) v.findViewById(R.id.hashmapKeys);
TextView tv2 = (TextView) v.findViewById(R.id.hashmapValues);
for (int i = 0; i < keys.size(); i++) {
ArrayList<Object> mKeys = new ArrayList<>(keys.get(i));
ArrayList<String> mValues = new ArrayList<>(values.get(i));
for (int j = 0; j <mKeys.size() ; j++) {
tv1.setText(String.valueOf(mKeys.get(j)));
tv2.setText(String.valueOf(mValues.get(j)));
}
}
return v;
}
@Override
public int getCount() {
return keys.get(0).size();
}
@Override
public Object getItem(int position) {
if (position >= keys.size())
return values.get(position);
return keys.get(position);
}
}
【问题讨论】:
-
通过遍历所有数据列表,您将始终得到最后一个列表中的数据。相反,您应该向您的适配器传递一个表示选项卡指示器的 int 值,以及来自 getView() 的位置,您可以检索正确的数据,如下所示:
tv1.setText(keys.get(tabIndicator).get(position)); tv2.setText(values.get(tabIndicator).get(position)); -
那么我怎样才能得到 tabIndicator - 你应该在为那个标签创建适配器时知道这一点,然后将这些信息传递给适配器。
-
您不是将所有值分配给相同的两个文本视图吗? tv1 和 tv2?
-
另一个重要提示:请不要使用
for循环您的ArrayLists。使用迭代器,效率更高。 -
@salih 像这样迭代:
for (ArrayList<Object> mKeys : keys) {for (Object object : mKeys) {}}
标签: android arraylist android-arrayadapter android-tablayout