ListView.setSelection不起作用

时间:2013-06-09 15:19:08

标签: android android-listview android-arrayadapter android-dialog

我正在开发一个有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但从未成功过:|

有人可以告诉我这是什么问题。

提前致谢

3 个答案:

答案 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);
    }
});

以上为我工作