2013-02-27 3 views
0

Это мой код для просмотра списка:начальное состояние вытяжке селектор списка не работает

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@color/darkgrey"> 
    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="#b5b5b5" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_selector" /> 

</LinearLayout> 

Это селектор списка:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" 
    android:drawable="@drawable/gradient_bg_hover" /> 

    <item android:state_selected="true" 
    android:state_pressed="false" 
    android:drawable="@drawable/gradient_bg_hover" /> 

    <item android:drawable="@drawable/gradient_bg" /> 
</selector> 

Моя цель состоит в том, чтобы добавить фон для элементов списка : начальный (без щелчка и без фокуса) -> серый фон. При нажатии -> синий фон. Когда выпущено -> серый фон.

Но исходный фон не отображается. Серый фон не отображается при открытии приложения, а когда вы еще не нажали элемент. Кто-то знает, как это исправить?

Java-часть:

package com.example.whs; 

import java.util.ArrayList; 
import java.util.HashMap; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 

public class Index extends Activity { 

    public static final Object TITLE = "title"; 
    public static final Object SUBTITLE = "subtitle"; 
    public static final Object THUMBNAIL = "thumbnail"; 
    protected static final String POSITION = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_index); 

     // Back actionbar icon enable 
     //ActionBar actionBar = getActionBar(); 
     //actionBar.setDisplayHomeAsUpEnabled(true); 

     buildMenu(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.index, menu); 
     return true; 
    } 

    //Builds the menu for listview 
    public void buildMenu(){ 
     ArrayList<HashMap<String, String>> menu = new ArrayList<HashMap<String, String>>(); 
     //Arrays for info 
     String[] menuTitleArray = {"Updates", "Gallerij"}; 
     String[] menuSubtitleArray = {"Bekijk updates", "Bekijk foto's en geef reacties", "Bekijk de updates"}; 
     String[] menuThumbnailArray = {"updates", "gallery"}; 
     for(int i=0; i < menuTitleArray.length; i++){ 
      // Build Hashmap for the item 
      HashMap<String, String> item = new HashMap<String, String>(); 
      item.put((String) TITLE, menuTitleArray[i]); 
      item.put((String) SUBTITLE, menuSubtitleArray[i]); 
      item.put((String) THUMBNAIL, menuThumbnailArray[i]); 
      menu.add(item); 
     } 


     // Add adapter to the list 
     MenuAdapter adapter = new MenuAdapter(this, menu); 
     ListView list = (ListView)findViewById(R.id.list); 
     list.setAdapter(adapter); 



     // Initialize the click event 
     list.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
       switch(position){ 
       case 0: 
        Intent intent = new Intent(Index.this, Updates.class); 
        startActivity(intent); 
       } 
      } 
     }); 

    } 
} 
+0

http://stackoverflow.com/questions/13474760/listselector-color-after-pressed-an-item У меня была та же проблема, и я нашел решение из выше ссылки, я использовал решение Shikha Shah – user1702512

ответ

1

Я думаю, это потому, что в макете xml вашей строки списка есть собственный набор фона. И тогда ваш listSelector успешно установлен, но покрывается :)

+0

Есть ли способ превратить фон? – 2013-02-27 15:06:01

+0

, если вы хотите использовать listSelector, затем установите фон вашей строки в @android: color/transparent – Bolton

+0

все еще не работает :( – 2013-02-27 15:36:10

0

Используйте свой android:listSelector="@drawable/list_selector" в вашем custom item layout вы использовали для ListView элементов.

Как у вас есть свой ListView здесь

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@color/darkgrey"> 
    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="#b5b5b5" 
     android:dividerHeight="1dp" 
     /> 

</LinearLayout> 

и использует следующую раскладку

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:listSelector="@drawable/list_selector"> 

</LinearLayout> 

Редактировать

Вы можете также использовать селектор, как

<item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item> 
<item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item> 
<item android:drawable="@drawable/button_bg_normal"></item> 
+1

все еще не работает правильно – 2013-02-27 14:11:08

+0

см. мой отредактированный ответ. не так ли? –

+0

, но вам нужно использовать это в списке, не так ли? – 2013-02-27 14:24:04

0

Я думаю, вы хотите добавить селектор в строку списка, а не в ListView :) Вот link для вас.

Смежные вопросы