2011-02-09 23 views
1

RESTサービスにヒットし、jsonを取得してリストビューに配置するアプリがあります。私の主な活動は、ListActivityではなくActivityを拡張しています。私はリスト項目をスクロールすることはできますが、私は何も選択できません(少なくともタッチで)。私はfindViewBYIdを使ってリストビューに行き、SimpleAdapterを拡張するアダプタを持っています。私はアダプタのgetVIew()内にconvertableをクリック可能に設定しています。しかし、これを行うと、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> 

ビューの各状態の色を定義することができます。この場合は、focusedとpressedを押します。それを使用するためには 、R.layout.list_itemに、あなたはnormaly背景を設定し、例えば

android:background="@drawable/list_row_background" 

xmlファイルのファイルがabovedがlist_row_backgroundとその描画可能なフォルダに

命名され記述ことを考慮すると、既にクリック可能なので、クリック可能に設定しないでください。 私はあなたの問題を解決することを望む:D 乾杯

0

1つの解決策は、あなたのアクティビティをListActivityに変更することです。

ユーザがリスト項目をタッチすると、このオーバーライドが呼び出される:

@Overrideは onListItemClick(リストビューL、ビューV、 INT位置、長いID)ボイド保護

vそれを変更したい場合はvです。
位置はアダプタへのインデックスです。

関連する問題