【发布时间】:2014-11-17 15:04:35
【问题描述】:
我有一个具有自定义适配器的 ListView。列表中的每一行都有 3 个文本字段和一个微调器。用户选择微调器项目后,我需要在文本视图中获取相关数据。 所以想象如下 listView : |texView|textView|textView|Spinner| 在微调列中选择某些内容时,我需要获取 3 个 textview 数据。但我无法做到这一点。
我对如何让它工作感到疯狂。这是 CustomAdapter 代码:
private class ViewHolder {
Spinner rateSpinner;
TextView pView;
TextView nView;
TextView cView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater vi =
(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.todolist_item, null);
holder = new ViewHolder();
holder.pView = (TextView)convertView.findViewById(R.id.r1);
holder.nView = (TextView)convertView.findViewById(R.id.r2);
holder.cView = (TextView)convertView.findViewById(R.id.r3);
holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2);
convertView.setTag(holder);
holder.rateSpinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Object item = parent.getItemAtPosition(pos);
selectedRating = item.toString();
Log.v("Chosen rating from spinner", selectedRating); //<-this works correctly
Log.v("**********************","**");// <------- Problem: Need to get list view's textview entries with the associated spinner. But its just not working. Always printing the same wrong textview data
Log.v("Order Name",item._nText);
Log.v("Order Count",item._cText);
Log.v("Order Price",item._pText);
Log.v("**********************","**");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(c,
android.R.layout.simple_spinner_item, list);
holder.rateSpinner.setAdapter(adapter);
fItem item = getItem(position);
holder.pView.setText(item._pText);
holder.nView.setText(item._nText);
holder.cView.setText(item._cText);
return convertView;
}
列表中的文本视图首先从数据库中加载。然后要求用户从微调器中选择评级。用户选择评分后,我需要找到关联的 textView 项目,我不明白如何获取此行数据。请参阅微调器的 onItemSelectedListener() 中的打印语句
非常感谢您帮助解决这个问题。
【问题讨论】:
-
明确一点:Log.v 为整个列表中的每个微调器一次又一次地打印相同的 textView 项
-
把这行
holder.personSpinner = (Spinner)convertView.findViewById(R.id.spinner2);放到IF中 -
您的代码中似乎有两个 Spinner,而您说您的 UI 类似于:|文本视图 |文本视图 |文本视图 | Spinner .. 什么是 holder.personSpinner 和 holder.rateSpinner?
-
一种糟糕的方法是创建一个新类
ViewHolder,其中包含您想要的3 个TextViews,并将其设置在您的rateSpinner.setTag(...)中。在你的监听器中, view.getTag() 应该给你你想要的。 -
你试过这个解决方案吗?
标签: android android-listview android-spinner android-adapter