2

我正在处理一个具有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但从未成功:|

谁能告诉我有什么问题。

提前致谢

4

3 回答 3

9

我遇到了同样的问题(setSelection()之后没有立即调用notifyDataSetChanged()),这终于帮助了我:

    lv.post(new Runnable() {

        @Override
        public void run() {
            lv.setSelection(mSelectedPosition);
        }
    });
于 2014-01-29T19:08:26.767 回答
0

对于任何遇到 listView.setSelection(int position) 似乎不起作用的问题的人来说,对我有用的一件事是确保在我完成更新我的 listView 适配器后运行此代码。如果您尝试在此之前执行此操作,那么一旦 listView 完成更新,滚动位置将完全不在所需位置。

在极端情况下,您可能需要放入像 MiroM 发现的可运行文件,但这通常不是必需的。祝你好运

于 2014-03-22T19:57:06.113 回答
0
listView.post(new Runnable() {
    @Override
    public void run() {
                listView.clearFocus();
                listViewAdapter.notifyDataSetChanged();
                listView.requestFocusFromTouch();
                listView.setSelection(focusPosOnline);
    }
});

以上为我工作

于 2017-08-27T13:18:43.523 回答