Вопрос по android – Изменение фона элемента ListView при нажатии - Android

0

Я подготовил собственный просмотр списка с помощью BaseAdapter. Теперь я хочу изменить цвет выбранного элемента списка при событии клика. И несколько предметов должны быть выбраны. Здесь я даю одну демонстрацию:

enter image description here

Цвет выбранного элемента - оранжевый. Это просто демонстрационный экран. Если кто-нибудь знает, как изменить весь цвет фона выбранного элемента списка, пожалуйста, оставьте свои отзывы. Благодарю.

Я использую этот класс BaseAdapter:

public class MyListAdapter extends BaseAdapter {

private Activity activity;
private String[] title, artist, duration, rowNumber;
private static LayoutInflater inflater=null;
ViewHolder holder;

View vi;

public MyListAdapter (Activity context, String[] songTitle,String[] songArtist, String[] songDuration )
{
   try
   {
    activity = context;
    title = songTitle;
    artist = songArtist;
    duration = songDuration;

    rowNumber = new String[title.length];
    for(int i=0;i<title.length; i++){
        rowNumber[i] = Integer.toString(i+1);
    }
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   }
   catch (NullPointerException e) 
   {
       e.printStackTrace();
   }
}

public int getCount() {
    return title.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public static class ViewHolder{
    private TextView txtSongNumber, txtSongTitle, txtSongArtist, txtSongDuration;

}

public View getView(int position, View convertView, ViewGroup parent) 
{
    try
    {
        vi=convertView;

       // System.out.println("Value of position"+position);
        if(convertView==null)
        {
            vi = inflater.inflate(R.layout.list_songs, null);
            holder=new ViewHolder();
            holder.txtSongNumber = (TextView)vi.findViewById(R.id.txtSongNumber);
            holder.txtSongTitle = (TextView)vi.findViewById(R.id.txtSongTitle);
            holder.txtSongArtist = (TextView)vi.findViewById(R.id.txtSongArtist);
            holder.txtSongDuration = (TextView)vi.findViewById(R.id.txtSongDuration);

            vi.setTag(holder);
        }
        else

            holder=(ViewHolder)vi.getTag();

        holder.txtSongNumber.setText(rowNumber[position]);
        holder.txtSongTitle.setText(title[position]);
        holder.txtSongArtist.setText(artist[position]);

        holder.txtSongDuration.setText(duration[position]);

    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    return vi;
}

}

Есть много вопросов относительно вашего запроса.Anyone of the link may helps you Praveenkumar

Ваш Ответ

3   ответа
2

В вашем списке адаптеров:

Сначала определите целочисленный массив

ArrayList<Integer> itemPos = new ArrayList<Integer>();

затем используйте этот код в вашем методе getView:

        if (itemPos.contains(position)) {
            holder.txtOne.setTextColor(Color.BLUE);
        } else {
            holder.txtOne.setTextColor(Color.WHITE);
        }

Теперь используйте этот код в событии клика вашего Text View:

            if (!itemPos.contains(position)) {
                holder.txtOne.setTextColor(Color.BLUE);
                itemPos.add(position);
                notifyDataSetChanged();
            } else {
                holder.txtOne.setTextColor(Color.WHITE);
                notifyDataSetChanged();
                int po = itemPos.indexOf(position);
                itemPos.remove(po);
            }
0

& quot; Большое спасибо за вашу помощь.. Теперь я обнаружил, что когда я щелкаю один элемент в списке, другой элемент также выбирается автоматически. Есть ли проблема с BaseAdapter? & Quot;

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

Как реализовать кнопку, которая получает все состояния флажка и добавляет значение проверяемого элемента в arraylist?

0

который имеет основной метод getView, вы можете легко сохранять состояния элементов в BaseAdapter. Например, вы можете использовать список для хранения состояний.

Затем должен быть реализован прослушиватель ListView, как описано вhttp://developer.android.com/reference/android/widget/AdapterView.html#setOnClickListener(android.view.View.OnClickListener). Документация по OnItemClickListener находится здесь,http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html, с помощью которого вы можете получить позиции кликов.

Наконец, измените состояние элементов после событий щелчка и вызовите notifyDataSetChanged () в адаптере, чтобы уведомить, что данные были изменены, и вы увидите обновленные выбранные элементы.

Нет, BaseAdapter работает хорошо. Но вам нужно проверить свой код, чтобы убедиться, что вы использовали правильный параметр OnItemClickListener. В OnItemClickListener положение означает «положение представления в адаптере», как описано в документации.
Я получаю выбранную позицию позиции. Это правильно. Но почему он выбирает более одного элемента, когда я выбираю только один? Krishna Suthar
Большое спасибо за вашу помощь. Я все это сделал. Теперь я обнаружил, что когда я щелкаю один элемент в списке, другой элемент также выбирается автоматически. Есть ли проблема с BaseAdapter? Krishna Suthar
Вы можете попытаться использовать Log.w, чтобы напечатать, сколько раз вызывается onItemClick (...), а также позиции нажатых элементов.

Похожие вопросы