Android: установить видимость отдельных кнопок в пользовательском ListView - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть ListView с пользовательским адаптером (расширяющий BaseAdapter), а макет каждой строки состоит из TextView и кнопки.После того, как список создан, я хочу изменить видимость определенных кнопок.

Для этого мне нужно программно получить доступ к представлению отдельной строки.Я не могу узнать, как это сделать. В этом ответе упоминается getView (int position), но я не могу найти этот метод;getView() нужно 3 параметра.Что я передаю как convertView на getView(int position, View convertView, ViewGroup parent)?

Не могли бы вы указать мне правильное направление?

ОБНОВЛЕНИЕ: Вид, полученный с помощью View v = myListView.getChildAt(myListView.getFirstVisiblePosition());, является нулевым.Кроме того, myListView.getChildCount () возвращает 0.

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

onItemClick передаст вам представление в ListView, по которому щелкнули. Затем вы можете получить этот вид и делать с ним все, что захотите, включая изменение видимости и т. Д.

http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

0 голосов
/ 22 ноября 2011

Вот пример I пользовательского адаптера, который я использовал в виде списка, в котором пользователь может выбрать элементы в списке и пометить их как «Удалить».Ключ должен добавить onClickListener после того, как у вас есть представление.Затем вы можете использовать это не только для изменения вида, но и для обновления данных адаптера.Надеюсь, вы можете изменить этот код в соответствии со своими данными.

private class DeletePlayerAdapter extends ArrayAdapter<Player> {
    Context context;
    int layoutResourceId;
    ArrayList<Player> data;

    public DeletePlayerAdapter(Context context, int layout,
            ArrayList<Player> list) {
        super(context, layout, list);
        this.layoutResourceId = layout;
        this.context = context;
        this.data = list;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        View row = convertView;
        PlayerHolder holder = null;
        if (row == null) {
            LayoutInflater inflater = ((Activity) context)
                    .getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new PlayerHolder();
            holder.player_name = (TextView) row
                    .findViewById(R.id.player_name);
            holder.player_number = (TextView) row
                    .findViewById(R.id.player_number);
            holder.seeded_button = (ImageButton) row
                    .findViewById(R.id.delete_toggle);
            holder.player_name.setTypeface(tf);
            holder.player_number.setTypeface(tf);
            row.setTag(holder);
            players_array.get(position).marked_for_delete = false;

        } else {
            Log.d("PLAYER_ADAPTER", "NOT_NULL ROW");
            holder = (PlayerHolder) row.getTag();
        }
        holder.seeded_button.setOnClickListener(new OnClickListener() {
            private int pos = position;

            public void onClick(View v) {
                ImageButton b = (ImageButton) v;
                if (b.isSelected()) {
                    b.setSelected(false);
                    players_array.get(pos).marked_for_delete = false;
                } else {
                    b.setSelected(true);
                    players_array.get(pos).marked_for_delete = true;
                }
            }
        });
        Player p = data.get(position);
        holder.player_name.setText(p.name);
        holder.player_number.setText(String.valueOf(position+1));
        holder.seeded_button
                .setSelected(players_array.get(position).marked_for_delete);
        return row;
    }

}

static class PlayerHolder {
    TextView player_number;
    TextView player_name;
    ImageButton seeded_button;
}
...