带有自定义列表项的自定义列表视图,其中包含 Spinner
Custom List View with custom list item which has Spinner
我正在使用带有微调器和文本框的自定义列表项实现自定义列表视图。我想在列表视图的列表项中使用 onItemSelected()
保存微调器的选定值,但我不知道要找到一个包含用户正在处理的微调器的列表项。我怎样才能得到这个,有人可以帮忙吗?
下面是我在列表视图适配器中的代码。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = inflater.inflate(R.layout.listitem, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);
viewHolder.view1.setFocusable(false);
viewHolder.view2.setFocusable(false);
viewHolder.view1.setAdapter(view1Adapter);
viewHolder.view1.setPrompt("Select");
viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selectedId = spinnerItemList.get(position).id;
// todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
listItemView.setTag(viewHolder);
}
CustomListItem item = listViewItemList.get(position);
ViewHolder viewHolder = listItemView.getTag();
viewHolder.view1.setSelection(item.view1Value);
viewHolder.view2.setText(String.valueOf(item.view2Value));
return listItemView;
}
如果您要处理适配器内微调器的 onItemSelected,请尝试以下操作:
//将activity/片段的上下文传递给适配器
context.saveSelectedValue(selectedId);
//将选中的它保存在activity/fragment
内
public void saveSelectedValue(String id){
//code to save
}
我发布了我找到的答案,作为对与我有同样问题的人的回答。实际上我从 Loc 的回答中看到了这个想法,但他以某种方式删除了他的回答。也许此解决方案中可能存在严重问题。无论如何,这现在对我有用。
我使用 setTag() 和 getTag() 来获取 CustomListItem。请看下面的代码。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = inflater.inflate(R.layout.listitem, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);
viewHolder.view1.setFocusable(false);
viewHolder.view2.setFocusable(false);
viewHolder.view1.setAdapter(view1Adapter);
viewHolder.view1.setPrompt("Select");
viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selectedId = spinnerItemList.get(position).id;
// todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
CustomListItem item = (CustomListItem)parent.getTag();
item.view1Value = selectedId;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
listItemView.setTag(viewHolder);
}
CustomListItem item = listViewItemList.get(position);
ViewHolder viewHolder = listItemView.getTag();
viewHolder.view1.setSelection(item.view1Value);
viewHolder.view.setTag(item);
viewHolder.view2.setText(String.valueOf(item.view2Value));
return listItemView;
}
我正在使用带有微调器和文本框的自定义列表项实现自定义列表视图。我想在列表视图的列表项中使用 onItemSelected()
保存微调器的选定值,但我不知道要找到一个包含用户正在处理的微调器的列表项。我怎样才能得到这个,有人可以帮忙吗?
下面是我在列表视图适配器中的代码。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = inflater.inflate(R.layout.listitem, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);
viewHolder.view1.setFocusable(false);
viewHolder.view2.setFocusable(false);
viewHolder.view1.setAdapter(view1Adapter);
viewHolder.view1.setPrompt("Select");
viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selectedId = spinnerItemList.get(position).id;
// todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
listItemView.setTag(viewHolder);
}
CustomListItem item = listViewItemList.get(position);
ViewHolder viewHolder = listItemView.getTag();
viewHolder.view1.setSelection(item.view1Value);
viewHolder.view2.setText(String.valueOf(item.view2Value));
return listItemView;
}
如果您要处理适配器内微调器的 onItemSelected,请尝试以下操作:
//将activity/片段的上下文传递给适配器
context.saveSelectedValue(selectedId);
//将选中的它保存在activity/fragment
内public void saveSelectedValue(String id){
//code to save
}
我发布了我找到的答案,作为对与我有同样问题的人的回答。实际上我从 Loc 的回答中看到了这个想法,但他以某种方式删除了他的回答。也许此解决方案中可能存在严重问题。无论如何,这现在对我有用。
我使用 setTag() 和 getTag() 来获取 CustomListItem。请看下面的代码。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = inflater.inflate(R.layout.listitem, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);
viewHolder.view1.setFocusable(false);
viewHolder.view2.setFocusable(false);
viewHolder.view1.setAdapter(view1Adapter);
viewHolder.view1.setPrompt("Select");
viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selectedId = spinnerItemList.get(position).id;
// todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
CustomListItem item = (CustomListItem)parent.getTag();
item.view1Value = selectedId;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
listItemView.setTag(viewHolder);
}
CustomListItem item = listViewItemList.get(position);
ViewHolder viewHolder = listItemView.getTag();
viewHolder.view1.setSelection(item.view1Value);
viewHolder.view.setTag(item);
viewHolder.view2.setText(String.valueOf(item.view2Value));
return listItemView;
}