2013-08-08 13 views
5

設定されているときにハイライトされていません。AndroidのListViewコントロールはOnClickListenerが、私は、これはXMLカスタムXMLのListItem移入リストビューでいる

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="?android:attr/listPreferredItemHeight" 
       android:padding="6dip"> 
... 
</RelativeLayout> 

のListViewが画面に正しく表示され、私はアイテムをクリックするか、保持している場合

@Override 
public View getView(int position, @Nullable View convertView, ViewGroup parent) { 
    ... 
    convertView = InflateUtils.inflate(mContext, R.layout.list_item); 
    ... 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(mContext, "Test", 2000).show(); 
     } 
    }); 
... 
} 
:それは青になり、私はBaseAdapterを拡張して、私の活動にgetViewメソッドの内部で、ビューにOnClickListenerを割り当てるしようとすると、

問題が来る(私はホロライトのテーマを使用しています)

これを実行した後、リストアイテムのハイライトカラーは表示されなくなります。リストアイテムをクリックしたり保持したりすると、白いままになります。 とにかくonClickListenerが完全に機能しています。

HoloLightのデフォルトスタイルを維持したままハイライトカラーを取得するよう提案していますか?

答えて

3

アイテムビューのリスナーを個別にクリックする代わりに、ListView自体にOnItemClickListenerを使用することができます。また、ハイライトの問題は既にここに記載されている

Android listview no longer highlights selection onclick

+0

私の答えが間違っているとコメントする人は、そうすれば、真実に近づくでしょう。 –

+0

私は、とにかく私はOnItemClickListenerについて興味がありましたが、これは私の問題を解決すると思いますか? OnClickListenerを区切ることでパフォーマンス上の問題はありますか? - 私はすでにその質問を読んでいますが、解決策は私が必要とするHoloLightスタイルを使用していません。 –

+0

あなたのアイテムが似ている場合は、1つのリスナを使用し、アイテムIDで区別することができます。ホロの場合 - あなたはその答えからの解決法でホロを使うことができます。強調表示された背景はR.drawable.list_selector_holo_darkと呼ばれます –

0

は、レイアウトにこれを追加しますが、親RelativeLayout属性:また

android:addStatesFromChildren="true" 

、コードの呼び出しに:

convertView.setAddStatesFromChildren(true); 

どちらの場合でも、子レイアウトにandroid:duplicateParentState属性が設定されていない(また、setDuplicateParentState(true)を呼び出さない)、o r実行時に例外が発生します。

+0

XMLの部分、私のために働いています。コンパイラはsetAddStatesFromChildrenメソッドが "存在しません"という文句を言うので、プログラム部分はテストできません。とにかく、なぜそれは動作するはずですか? –

0

あなたはハイライトの動作を維持し、あなたが

  1. OnClickListener
  2. コールOnItemClickListenerからOnClickListenerを無効OnClickListener
  3. を設定した場合、複数のOnClickListenerを持つことができます。

は、そうあなたのコードにsetClickable(false)を追加するには、プログラムでリスナーを

@Override 
public View getView(int position, @Nullable View convertView, ViewGroup parent) { 
    ... 
    convertView = InflateUtils.inflate(mContext, R.layout.list_item); 
    ... 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(mContext, "Test", 2000).show(); 
     } 
    }); 
    // make non-clickable again, like before setting the OnClickListener 
    convertView.setClickable(false); 
    ... 
} 

と呼ん例:callOnClick()

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) 
{ 
    final View view = inflater.inflate(R.layout.fragment_with_listview, container, false); 
    final ListView your_listview = (ListView) view.findViewById(R.id.your_listview); 
    // delegate to specific callbacks 
    your_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { view.callOnClick(); 
     } 
    }); 
    ... 
} 

注文書化行動:

添付されているOnClickListenerを直接呼び出します。 performClick()とは異なり、これはリスナーを呼び出すだけで、アクセシビリティイベントのレポートなどの関連するクリックアクションは行いません。

関連する問題