2015-06-10 113 views
0

我無法突出顯示ListView中選定的項目。我遵循了http://www.michenux.net/android-listview-highlight-selected-item-387.html中的程序。我也嘗試了Android: setselector color for listview not working中的建議無濟於事。我已經嘗試使用DialogFragment中的ListView以及Activity。 (1)我可以設置選擇,但我不能查詢SelectedItemPosition,(2)onItemSelected永遠不會被調用,(3)我無法獲得子View。無法突出顯示ListView中的選定項目

下面是一些代碼:

public class ChooseDirActivity extends Activity 
{ 
    private ListView listView = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.choose_dir_layout); 
    listView = (ListView)findViewById(R.id.directory_list); 
    StateListDrawable selector = new StateListDrawable(); 
    selector.addState(new int[]{android.R.attr.state_selected}, new ColorDrawable(0x808080)); 
    selector.addState(new int[]{ -android.R.attr.state_selected }, new ColorDrawable(0xFFFFFF)); 
    listView.setSelector(selector); 

    listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) 
     { 
     Log.i("myApp", "onItemSelected"); // Never called 
     view.setBackgroundColor(0x808080); 
     } 

     @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); } 

    @Override 
    protected void onResume() 
    { 
    super.onResume(); 
    currentDirectory = Intonia.getStorageDirectory(); 
    ArrayList<String> dirList = getDirectoryList(); 
    int selected = 11; 
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dirList)); 
    Log.i("myApp", "setting selection to " + selected); 
    listView.setSelection(selected); 
    listView.setItemChecked(selected, true); 
    Log.i("myApp", "selected item position is " + listView.getSelectedItemPosition()); 
    View childView = listView.getChildAt(selected); 
    if (childView == null) 
    { 
     Log.i("myApp", "view at " + selected + " is null"); 
    } 
    else 
     childView.setBackgroundColor(0x808080 ); 
    Object so = listView.getItemAtPosition(selected); 
    Log.i("myApp", "item at " + selected + " is " + (so == null ? "null" : so.getClass().toString())); 
    } 

} 

設置選擇確實所選項目移動到屏幕的頂部,但並沒有出現任何的方式來跟進吧。

這將產生以下的日誌輸出

myApp: setting selection to 11 
myApp: selected item position is -1 
myApp: view at 11 is null 
myApp: item at 11 is class java.lang.String 

誰能幫助我?

回答

0

解決方案是使用ListActivity,並通過在適配器中重寫getView來設置背景顏色。設置選區會將選中的項目移動到用戶屏幕的頂部,但在提供視圖時無用。

public class DCListActivity extends ListActivity 
{ 
    private int selected = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     ArrayList<String> dirList = getDirectoryList(); 
     selected = 11; 
     setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1, dirList)); 
     getListView().setSelection(selected); 
    } 

    private class MyAdapter extends ArrayAdapter<String> 
    { 
     public MyAdapter(Context context, int resource, List<String> objects) 
     { 
      super(context, resource, objects); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View v = super.getView(position, convertView, parent); 
      if (position == selected) 
       v.setBackgroundColor(getResources().getColor(R.color.background_highlight)); 
      else 
       v.setBackgroundColor(getResources().getColor(R.color.background)); 
      return v; 
     } 
    } 

Ç

相關問題