2013-08-08 16 views
5

ayarlandığında vurgulayın değildir:Android ListView bir OnClickListener Ben, bu XML özel XML ListItems ile doldurulan bir ListView olduğunu var

<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> 

liste görünümü ekranda düzgün gösterir ve ben bir öğenin tıklayabilir veya tutarsan

@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(); 
     } 
    }); 
... 
} 
: mavi olur i BaseAdapter uzanır benim Faaliyeti GetView içinde görünümüne bir OnClickListener atamak çalıştığınızda

sorun gelir (Ben Holo Işık Theme kullanıyorum)

bunu yaptıktan sonra, liste öğesi vurgu renginin daha fazla gösterilmediğini, bir liste öğesini tıklattığımda veya tuttuğumda, arka plan beyaz renkte kalıyor, zaten mükemmel bir şekilde çalışıyor.

HoloLight'ın varsayılan stillerini korurken vurgu rengini almak için herhangi bir öneriniz var mı?

cevap

3

yerine madde görünümleri için ayrı tıklama dinleyicilerin, ListView kendisinde OnItemClickListener kullanmak isteyebilirsiniz. Ayrıca

, vurgulamak sorun burada zaten tarif edilmiştir: Kod çağrısında,

android:addStatesFromChildren="true" 

Alternatif: Android listview no longer highlights selection onclick

+0

Reddedilen kişi, cevabımda neyin yanlış olduğuna dair yorum yapmayı önemsiyor mu? Bu şekilde doğruya yaklaşacağız. –

+0

i yapmadım, zaten OnItemClickListener'i merak ettim, bunun benim problemimi çözeceğini düşünüyor musunuz? OnClickListener'ı ayıran herhangi bir performans sorunu var mı? - Bu soruyu zaten okudum, ancak çözüm gerekli olan HoloLight stili kullanmıyor. –

+0

Öğeleriniz birbirine benziyorsa, bir tane dinleyici kullanabilir ve öğe kimliğine göre ayırabilirsiniz - yüzlerce yerine bir nesne. Holo olarak - bu cevaptan çözümle holo kullanabilirsiniz, vurgulanan arka planı kullan R.drawable.list_selector_holo_dark –

0

düzene bu ekle ebeveyn RelativeLayout için niteliklerini

convertView.setAddStatesFromChildren(true); 

Her iki durumda da, çocuk düzenlerinin android:duplicateParentState öznitelik kümesine sahip olmadığından emin olun (setDuplicateParentState(true) numaralı telefonu arayın). r çalışma zamanında bir istisna alacaksınız.

+0

Benim için çalışıyor, XML kısmı. Ben derleyici test edemediğim programatik bölüm çünkü setAddStatesFromChildren "var değil" yönteminden şikayet ediyor. Neyse, neden işe yarayacak? –

0

Sen vurgulama davranışını tutmak ve

  1. OnClickListener
  2. aramayı bir OnItemClickListener den OnClickListener devre dışı OnClickListener
  3. ayarlarsanız, birden OnClickListener sahip olabilir.

Bunu yapmak kodunuzu setClickable(false) eklemek için: programlı dinleyici

@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); 
    ... 
} 

ve çağrı örn: callOnClick() ait

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(); 
     } 
    }); 
    ... 
} 

Not belgelenmiş davranışı:

Doğrudan bağlı herhangi bir OnClickListener'i arayın. performClick()'dan farklı olarak, bu yalnızca dinleyiciyi çağırır ve erişilebilirlik olayını bildirmek gibi ilişkili tıklama eylemleri gerçekleştirmez.

İlgili konular