2

我创建了一个派生自 ListActivity 类的 RecordActivity 类,并为 .xml 中定义的 ListView 设置选择模式和选择器。默认行为是仅当我按下所选项目时才会突出显示。我想保持选定的项目突出显示。我试图覆盖 ArrayAdapter 的 getView 方法,但是它不起作用。任何帮助将不胜感激。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >

   <ListView  android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>     
</LinearLayout>

public class RecordsActivity extends ListActivity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.records);

      List<Record> values = getAllRecords();
      // Use the SimpleCursorAdapter to show the
      // elements in a ListView
      adapter = new ArrayAdapter<Record>(this, android.R.layout.simple_list_item_1, 
                                                            values);
      setListAdapter(adapter);    
      getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
      getListView().setSelector(android.R.color.holo_red_dark);
   }

   @Override
   protected void onListItemClick(ListView l, View v, int position, long id) {
      selectedItem = position;
      v.setSelected(true);      
   }
}
4

3 回答 3

4

尝试使用simple_list_item_activated_1

adapter = new ArrayAdapter<Record>(this, android.R.layout.simple_list_item_activated_1, 
                                                        values);
于 2013-04-15T07:24:02.517 回答
1
    private int selectedValue;
    private View row;

  ListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            selectedValue=arg2;
            if(row!=null)
            {
                                row.setBackgroundResource(R.drawable.group_item_normal);
            }
            row=arg1;
        arg1.setBackgroundResource(R.drawable.group_item_pressed);

        }
    });

在 getView() 中执行:- v 是 getView() 返回的对象

  if(selectedValue==position)
        {
            v.setBackgroundResource(R.drawable.group_item_pressed);

        }
        else{
            v.setBackgroundResource(R.drawable.group_item_normal);

        }
于 2013-04-15T07:49:18.050 回答
0

试试这个,在蜂窝或更高版本上,所选项目将保持突出显示。由于 android.R.layout.simple_list_item_activated_1 仅适用于蜂窝或更高版本,您应该添加这样的布局以支持旧平台。

int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1
                : android.R.layout.simple_list_item_1;


adapter = new ArrayAdapter<Record>(this, layout, values);
于 2013-04-15T07:28:58.787 回答