Я сделаю это более надежным способом.Я думаю, что вы знаете работу Listview и адаптера.
Итак, у вас есть список предметов, которые вы передаете на свой адаптер.Я изменю свой класс Item следующим образом.Пожалуйста, добавьте эти два поля в класс Item, который, я думаю, является моделью
public boolean isButtonVisible = true;
public boolean isTextViewVisible = false;
Идите головой, создайте заголовок и установщик. Или измените любое значение по умолчанию
теперь в вашем методе getViewАдаптер делает это в конце // Или просто скопируйте replace
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, parent, false);
}
TextView itemName = row.findViewById(R.id.list_item_name);
myButton = row.findViewById(R.id.myButton);
status = row.findViewById(R.id.status);
Item item = getItem(position);
if (item != null) {
itemName.setText(item.getName());
myButton.setOnClickListener(v -> clickedListener.buttonClicked(item));
if(item.isButtonVisible){
myButton.setVisiblity(View.VISIBLE);
}else{
myButton.setVisibilty(View.GONE)
}
if(item.isTextViewVisible){
myTextView.setVisiblity(View.VISIBLE);
}else{
myTextView.setVisibilty(View.GONE)
}
}
return row;
}
Наконец, сделайте это в своем фрагменте внутри следующего метода
@Override
public void buttonClicked(Item item) {
doSomeStuff();
item.setButtonVisibility (Whatever you want to do true or false)
ite.setTextViewVisible (Whatever you want to do true or false)
myListAdapter.notifyDataSetChanged();
}
Важно: Вам необходимо вызвать myListAdapter.notifyDataSetChanged () в конце.вам не нужно вызывать myListAdapter.displayTextView ();как это не будет работать