Обновление Listitem Textview при нажатии кнопки Listitem в пользовательском адаптере Listview - PullRequest
0 голосов
/ 21 мая 2018

У меня есть просмотр списка с просмотром текста и кнопкой.

Мне нужно обновить просмотр текста при нажатии кнопки в просмотре списка и скрыть кнопку.

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

Customadapter.java

public class CustomAdapter extends BaseAdapter {
    ArrayList cusList = new ArrayList();
    LayoutInflater inflater;
    Context context;

    public BookAdapter(Context context, ArrayList cusList) {
        this.cusList = cusList;
        this.context = context;
        inflater = LayoutInflater.from(this.context);
    }

    @Override
    public int getCount() {
        return cusList.size();
    }

    @Override
    public Object getItem(int position) {
        return cusList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list, parent, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        Bookdata data = (Bookdata) getItem(position);
        viewHolder.mytv.setText(data.getName());

        viewHolder.mybtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setVisibility(View.GONE);
                viewHolder.setText("Clicked");
            }
        });

        return convertView;
    }

    private class ViewHolder {
        TextView mytv;
        Button mybtn;

        public ViewHolder(View item) {
            mytv = (TextView)item.findViewById(R.id.mytv);
            mybtn = (Button)item.findViewById(R.id.mybtn);
        }
    }
}

Bookdata.java

public class Bookdata {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Код списка:

ListView books= (ListView) findViewById(R.id.books);
ArrayList bookList = new ArrayList();
for (int i = 0; i < 10; i++) {
    Bookdata data = new Bookdata();
    data.setName("position "+i);
    bookList.add(data);
}
CustomAdapter allbookAda= new CustomAdapter(context, bookList);
books.setAdapter(allbookAda);
allbookAda.notifyDataSetChanged();

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Это обычное поведение, поскольку просмотр списка использует переработанные представления, приведенные выше ответы верны, но я предпочитаю более чистый подход с использованием DataBinding

0 голосов
/ 21 мая 2018

Поддерживайте флаг для каждого элемента списка, чтобы проверить, какой элемент списка был обновлен или нет.

В основном принимайте одно значение флага в классе вашей модели.

public class Bookdata {
private String name;
private boolean flag;
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public boolean isFlag() {
    return flag;
}

public void setFlag(boolean flag) {
    this.flag = flag;
}

}

добавить следующие изменения в ваш метод getview

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder viewHolder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list, parent, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    Bookdata data = (Bookdata) getItem(position);
    viewHolder.mytv.setText(data.getName());

    if(data.getFlag){
   viewHolder.mybtn.setVisibility(View.GONE);
    }

    viewHolder.mybtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setVisibility(View.GONE);
            viewHolder.setText("Clicked");
            cusList.get(position).setFlag(true);

        }
    });

    return convertView;
}
...