如何禁用列表视图中的项目?

Pra*_*tye 16 android listviewitem android-widget

我有一个列表视图,通过数据库中的记录填充.现在我必须让一些记录可见,但无法选择,我该如何实现呢?

这是我的代码

public class SomeClass extends ListActivity { 
    private static List<String> products; 
    private DataHelper dh; 
    public void onCreate(Bundle savedInstanceState) { 
        dh = new DataHelper(this); 
        products = dh.GetMyProducts();  /* Returns a List<String>*/ 
        super.onCreate(savedInstanceState); 
        setListAdapter(new ArrayAdapter<String>(this, R.layout.myproducts, products)); 
        ListView lv = getListView();
        lv.setTextFilterEnabled(true); 
        lv.setOnItemClickListener( new OnItemClickListener() { 
            @Override 
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
                // TODO Auto-generated method stub 
                Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), Toast.LENGTH_SHORT).show(); 
            } 
        }); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

布局文件myproducts.xml如下:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textSize="16sp"> 
</TextView>
Run Code Online (Sandbox Code Playgroud)

Yon*_*lan 31

使自己的ArrayAdapter子类具有AreAllItemsEnabled()返回false,并定义isEnabled(int position)以返回数据集中给定项目的true/false.

  • 小心这个解决方案.BaseAdapter的文档声明如下"如果指定位置的项不是分隔符,则返回true".这意味着如果您返回false,则该项目是分隔符项目.有些手机可能无法在普通项目和分隔项目之间绘制android:divider. (13认同)
  • 这绝对是真的,我之前遇到过这个问题; 我在行布局中包含了一个分隔符,并在getView()中显示/隐藏它,或者启用了项目但忽略了对它们的点击并设置了没有按下状态的背景,因此它们看起来不像点击. (2认同)