2015-01-26 2 views
0

У меня есть настроенное listview в действии. Элемент списка listview имеет собственный макет с двумя текстовыми активами и одной кнопкой.Событие события Listview подсвечивает неправильный элемент

список правильно заполняется, и я могу нажать на кнопку, не активируя фактическую строку элемента, используя «„андроид: descendantFocusability =“blocksDescendants"»в макете пункта

Но когда я нажав на значок разные строки, я получаю странные hightlighting.

в списке есть две записи. При нажатии на основной строке для пункта # 1 HIGHTLIGHTS весь ряд, прекрасно. При нажатии на кнопку высвечивает кнопку, снова штраф.

Но коснувшись основная строка для элемента № 2, кнопка в этой строке подсвечивается, а не сама строка. Кнопка ping также загорается кнопкой, как обычно.

Так почему же строка № 2 не выделяется при нажатии?

активность (есть родитель RelativeView):

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/screenListView" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

ListView Item:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:descendantFocusability="blocksDescendants" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Text" 
    android:id="@+id/name" 
    android:layout_margin="5dp" 
    android:layout_alignParentLeft="true" 
    android:textSize="16sp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Text" 
    android:id="@+id/playlist" 
    android:textSize="12sp" 
    android:layout_margin="5dp" 
    android:layout_below="@+id/name" 
    android:layout_alignParentLeft="true" /> 

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/playButton" 
    android:src="@drawable/ic_action_play" 
    android:layout_alignParentRight="true" /> 

</RelativeLayout> 

адаптер:

public class ScreenListViewAdapter extends ArrayAdapter<ScreenModel> { 

private final Context context; 
private final ArrayList<ScreenModel> optionsArrayList; 

public ScreenListViewAdapter(Context context, ArrayList<ScreenModel> optionsArrayList) { 

    super(context, R.layout.playlist_list_item, optionsArrayList); 

    this.context = context; 
    this.optionsArrayList = optionsArrayList; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.screen_list_item, parent, false); 

    if (position % 2 == 1) { 
     rowView.setBackgroundColor(context.getResources().getColor(R.color.list_row_colour_1)); 
    } 

    rowView.setTag(optionsArrayList.get(position).getPlaylistId()); 

    TextView name = (TextView) rowView.findViewById(R.id.name); 
    TextView playlistName = (TextView) rowView.findViewById(R.id.playlist); 
    ImageButton playBtn = (ImageButton) rowView.findViewById(R.id.playButton); 

    playBtn.setTag(optionsArrayList.get(position).getPlaylistId()); 

    name.setText(optionsArrayList.get(position).getName()); 
    playlistName.setText(optionsArrayList.get(position).getPlaylistName()); 

    // handle "play" button 
    playBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // do stuff 
     } 
    }); 

    return rowView; 
} 
+0

Можете ли вы опубликовать класс адаптера? – sandeepmaaram

+0

Ага, кажется, изменение цвета фона было причиной! Любая идея, почему это так? И как я могу иметь другой цвет, но исправить выделение? –

+0

Вы написали условие, например if (position% 2 == 1) { rowView.setBackgroundColor (context.getResources(). GetColor (R.color.list_row_colour_1)); }. Это означает, что значение позиции нечетное, а затем переходит в состояние – sandeepmaaram

ответ

-1

Как я могу иметь различный цвет

if (position % 2 == 1) { 
rowView.setBackgroundColor(context.getResources().getColor(R.color.list_row_colour_1)); 
} else { 
rowView.setBackgroundColor(context.getResources().getColor(R.color.list_row_colour_2)); //Set color 2 
} 

Тайны, как известно, происходят в адаптере, когда блок еще не добавлен.

Edit: После прочтения комментария, кажется this answer может оказать помощь. В основном просят установить choiceMode = "singleChoice" и применить listSelector. Также обратите внимание:

Если вы установили фон из метода getView, вместо использования статического цвета, примените список состояний, пригодный для рисования на фоне строк с duplicateParentState, установленным в true. Таким образом, он изменит свой дисплей на основе текущего состояния элемента: нормального, сфокусированного, прессованного и т. Д.

+0

Вы не правильно прочитали мой вопрос. Я говорю об цвет подсветки, когда вы нажимаете/касаетесь строки. Пожалуйста, перечитайте мой вопрос. Если у вас есть идея, почему подсветка нарушена при настройке разных цветов фона, отлично, пожалуйста, поделитесь своим ответом. Но этот ответ НЕ относится к моему фактическому вопросу. –

+0

Кроме того, полное предложение было «И как я могу иметь другой цвет, но исправить выделение?» Потому что, если вы читаете, когда вы устанавливаете новый цвет, он разбивает выделение (или, по крайней мере, устанавливает его на цвет, который вы не можете видеть очень хорошо, по сравнению с синим цветом по умолчанию) –

+0

Я отредактировал ответ. Я надеюсь, что это помогает. –

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