我正在开发一个有ListView
..
我已成功将适配器,选择器,list_itemlayout放在onCreate()
中,如下所示..
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.variable_dialog);
lv=(ListView) findViewById(R.id.VariableslistView1);
lv.setAlwaysDrawnWithCacheEnabled(true);
final ArrayAdapter<String> ad=new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1,Program.get().symboltable.getSymbols());
lv.setAdapter(ad);
lv.setSelector(R.drawable.item_selected);
但每当我试图获得getSelectedItemPosition()
时,它总是返回-1
lv.setSelected(true);
lv.setSelection(1);
lv.setItemChecked(1, true);
ad.notifyDataSetChanged();
ad.notifyDataSetInvalidated();
这是我的选择器:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke
android:width="2dp"
android:color="#FF00FF00" />
<gradient
android:angle="225"
android:endColor="#DD2ECCFA"
android:startColor="#DD000000" />
<corners
android:bottomLeftRadius="7dp"
android:bottomRightRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
为了上帝的缘故,到底出了什么问题?!?!
我甚至尝试了AdapterView.OnItemSelectedListener
但从未成功过:|
有人可以告诉我这是什么问题。
提前致谢
答案 0 :(得分:9)
我遇到了同样的问题(setSelection()
后不立即调用notifyDataSetChanged()
),这最终帮助了我:
lv.post(new Runnable() {
@Override
public void run() {
lv.setSelection(mSelectedPosition);
}
});
答案 1 :(得分:0)
对于任何来到这个问题的人来说,listView.setSelection(int position)似乎不起作用,对我来说有一件事就是确保在我更新listView适配器后运行此代码。如果你在完成之前尝试这样做,那么一旦listView完成更新,滚动位置将完全不在所需的位置。
在极端情况下,你可能需要像MiroM一样放入一个可运行的但是通常没有必要。祝你好运
答案 2 :(得分:0)
listView.post(new Runnable() {
@Override
public void run() {
listView.clearFocus();
listViewAdapter.notifyDataSetChanged();
listView.requestFocusFromTouch();
listView.setSelection(focusPosOnline);
}
});
以上为我工作