我有一个ListView
,其中包含复选框,其行为有时像CHOICE_MODE_MULTIPLE
,有时像CHOICE_MODE_SINGLE
。我的意思是列表中的某些项目,当选择某些其他项目需要取消选择,而其他项目可以保持选择。如何在单击某个项目时更改Android ListView中的其他项目
所以当项目一个被选中,我可以在我的数据需要被选中,但我怎么拿到UI刷新,以显示这是我(我相信)无法找到实际的项目乙找到View
,代表B但只是它的数据?
我有一个ListView
,其中包含复选框,其行为有时像CHOICE_MODE_MULTIPLE
,有时像CHOICE_MODE_SINGLE
。我的意思是列表中的某些项目,当选择某些其他项目需要取消选择,而其他项目可以保持选择。如何在单击某个项目时更改Android ListView中的其他项目
所以当项目一个被选中,我可以在我的数据需要被选中,但我怎么拿到UI刷新,以显示这是我(我相信)无法找到实际的项目乙找到View
,代表B但只是它的数据?
可以使用singleChoice alartDialog,我已经使用,如:
private int i = 0; // this is global
private final CharSequence[] items = {"Breakfast", "Lunch", "Dinner"}; // this is global
Button settings = (Button)view.findViewById(R.id.settings);
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
//Title of Popup
builder.setTitle("Settings");
builder.setSingleChoiceItems(items, i,
new DialogInterface.OnClickListener() {
// When you click the radio button
public void onClick(DialogInterface dialog, int item){
i=item;
}
});
builder.setPositiveButton("Confirm",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (i == 0) {
//it means 1st item is checked, so do your code
}
if (i == 1) {
//it means 2nd item is checked, so do your code
} /// for more item do if statement
}
});
//When you click Cancel, Leaves PopUp.
builder.setNegativeButton("Cancel", null);
builder.create().show();
}
});
因此,对于第一次上settings
按钮用户点击,选择的第一个项目时,我已经初始化i=0
。然后当用户选择其他项目后,我保存了i
值,以便下次用户点击settings
按钮时,我可以向用户显示他/她先前选择的项目。
这听起来像你是一个好开始。当你点击A时,你应该操纵项目B的底层数据源。
两个小技巧,可以帮助你:
getView()
在适配器方法应该是看你的数据源,并根据其发现改变convertView
。您无法找到代表B的实际视图,因为在ListView
中,Views
将被回收并在需要显示不同的数据时重新使用。基本上,当一个项目从列表中滚动时,已使用的View
作为convertView
传递到getView()
函数,准备处理下一个元素的数据。出于这个原因,您可能不应直接根据用户输入而改变View
中的ListView
,而应根据底层数据直接更改View
。notifyDataSetChanged()
来发出信号,指出底层数据已更改的某个位置,并且应该再次调用getView()
以显示列表中当前显示的元素。如果您仍然遇到问题,请随时发布一些代码,说明您遇到的具体问题。当问题得到更好的定义时,提供具体的建议会容易得多。希望这可以帮助!
我今天碰到并解决了这个问题。
public class ItemChooceActivity extends Activity implements OnItemClickListener {
private int chosenOne = -1;
class Madapter extends BaseAdapter {
.....
.....
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if (chosenOne != position) {
set the view in A style
} else {
set the view in B style
}
return convertView;
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {
,,,,
chosenOne = position;
adapter.notifyDataSetChanged();
,,,
}
}
我想通了,我可以用'getChildAt'和'getFirstVisiblePosition'找到实际的'View'我需要考虑的项目指标和减去'getFirstVisiblePosition返回的值更新'。 – bornander 2013-02-20 22:37:43