2011-02-09 29 views
1

我有一個打一個REST服務,得到了一些JSON,然後將其放入一個列表視圖的應用程序。我的主要活動擴展了Activity而不是ListActivity。我可以滾動列表項目,但我不能選擇任何(至少通過觸摸)。我通過findViewBYId進入listview並擁有一個擴展SimpleAdapter的適配器。我已經將適配器的getVIew()內的convertView設置爲可點擊。但是,當我這樣做時,我不能再點擊列表視圖中的列表項目?我做錯了嗎?無法獲得被選中時,他們要強調我的ListView項目

public class App extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     jobsListView = (ListView) findViewById(R.id.jobs_list); 
     jobsListView.setAdapter(new JobItemAdapter(jobsListView.getContext(), 
       jobsList, 
       R.layout.list_item, 
       new String[] {"title","location"}, 
       new int[] {R.id.job_title, R.id.job_location})); 
     jobsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Log.i("jobsListView.setOnItemClickListener()"," item clicked: " + arg0.getSelectedItemPosition()); 
      } 

     }); 

    } 

    public class JobItemAdapter extends SimpleAdapter { 
     private List<HashMap<String,String>> jobsList; 

     public JobItemAdapter(Context context, List<HashMap<String,String>> jobs, int resource, String[] from, int[] to) 
     { 
      super(context, jobs, resource, from, to); 
      jobsList = jobs;    
     } 

     public View getView(int position, View convertView, ViewGroup parent){ 
      Log.i(TAG," in JobItemAdapter getView() "); 

      if (convertView == null) { 
       //no previous views, inflate views 
       convertView = getLayoutInflater().inflate(R.layout.list_item, parent, false); 
      } 

      //update textviews in layout 
      TextView title = (TextView)convertView.findViewById(R.id.job_title); 
      title.setText(jobsList.get(position).get("title")); 

      TextView location = (TextView)convertView.findViewById(R.id.job_location); 
      location.setText(jobsList.get(position).get("location")); 
      //make the view clickable 
      convertView.setClickable(true); 
      return convertView; 
     } 

    } 

} 

回答

2

大概什麼都可以發生的事情是,要定義的行,在R.layout.list_item定義的背景顏色,以及背景顏色是不是在選擇定義的顏色,例如:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" > 
     <shape android:shape="rectangle"> 
      <solid 
       android:color="@color/blue_button_press"/> 
     </shape> 
    </item> 
    <item android:state_selected="true" > 
     <shape android:shape="rectangle"> 
      <solid 
       android:color="@color/blue_button_focus" /> 
     </shape> 
    </item> 
    <item android:state_focused="true" > 
     <shape android:shape="rectangle"> 
      <solid 
       android:color="@color/blue_button_focus" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle" > 
      <solid 
       android:color="@color/white" /> 
     </shape> 
    </item> 
</selector> 

在裏面,你可以定義顏色查看的每個狀態,在這種情況下:專注和壓制。 爲了使用它,在R.layout.list_item,你設置的背景normaly,例如

android:background="@drawable/list_row_background" 

考慮到XML文件文件中描述aboved名爲list_row_background及其在繪製文件夾

你不應該將它設置爲可點擊,因爲它已經是可點擊的。 我希望解決您的問題:d 乾杯

0

一種解決方案是將您的活動更改爲ListActivity。

當用戶觸摸列表項此覆蓋被稱爲:

@覆蓋保護無效 onListItemClick(ListView的L,視圖V, INT位置,長ID)

的如果你想改變它,v是單元格。
該位置是適配器的索引。

相關問題