2011-02-09 7 views
1

REST 서비스를 실행하고 json을 가져 와서 listview에 배치하는 앱이 있습니다. 내 주요 활동은 ListActivity가 아니라 Activity를 확장합니다. 목록 항목을 스크롤 할 수는 있지만 선택할 수는 없습니다 (적어도 터치 만하면됩니다). findViewBYId를 통해 listview에 도착하고 SimpleAdapter를 확장하는 어댑터가 있습니다. clickable로 어댑터의 getVIew() 내부에 convertView를 설정했습니다. 그러나 이렇게하면 listView의 목록 항목을 더 이상 클릭 할 수 없습니까? 내가 잘못 했니?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, 당신은 xml 파일 파일 list_row_background 이름 aboved과 드로어 블 폴더에

기술 된 점을 고려 예를

android:background="@drawable/list_row_background" 

를 들어, normaly 배경을 설정 이미 클릭 할 수 있으므로 클릭 가능으로 설정해서는 안됩니다. 문제가 해결되기를 바랍니다. D 환호

0

하나의 해결 방법은 활동을 ListActivity로 변경하는 것입니다.

@Override 무효 onListItemClick (ListView에 리터,보기 V, INT 위치, 긴 ID가)

보호 : 사용자가이 오버라이드가 호출되는 목록 항목을 터치

v 변경하려는 경우 셀입니다.
위치는 어댑터에 대한 인덱스입니다.

관련 문제