Отображение setError в RecyclerView.Adapter из метода - PullRequest
0 голосов
/ 08 января 2020

Я пытался отобразить ошибку на listadapter Item из метода. Таким образом, в основном, когда метод вызывается, ошибка будет отображаться в этом указанном элементе c, а при повторном вызове он исчезнет.

public class AddedDevicesListAdapter extends RecyclerView.Adapter<BaseViewHolder> implements ItemProvider {

        enum ItemTypes {
            TITLE,
            ITEM
        }

        private final LayoutInflater inflater;
        private List<Object> items;
        private Context context;
        private final View.OnClickListener onClickListener;
        private RecyclerView.ViewHolder viewHolder;

        public AddedDevicesListAdapter(Context context, View.OnClickListener onClickListener) {
            this.inflater = LayoutInflater.from(context);
            this.onClickListener = onClickListener;
            this.context = context;
            items = new ArrayList<>();
        }

        public void setItems(List<DocumentDevice> items) {
            // create new to avoid wierd reference problems on Android 7
            this.items = new ArrayList<>();
            if(!items.isEmpty()) this.items.add(context.getResources().getString(R.string.doc_devices));
            this.items.addAll(items);
            notifyDataSetChanged();
        }

        public void clear() {
            items.clear();
            notifyDataSetChanged();
        }

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

        public void displayError(int position, boolean shouldBeVisible){
    //        getItem(position).getClass().
    //        if(viewHolder != null){
    //            if(shouldBeVisible){
    //                viewHolder.itemView.
    //                viewHolder.getChildAt(position).findViewById(R.id.addedDeviceError).setVisibility(View.VISIBLE);
    //            } else {
    //                viewHolder.getChildAt(position).findViewById(R.id.addedDeviceError).setVisibility(View.GONE);
    //            }
    //        }
        }

        @Override
        public int getItemViewType(int position) {
            if (getItem(position) instanceof DocumentDevice){
                return ItemTypes.ITEM.ordinal();
            }
            return ItemTypes.TITLE.ordinal();
        }

        @Override
        public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == ItemTypes.ITEM.ordinal()) {
                View view = inflater.inflate(R.layout.list_item_vertical, parent, false);
                return new ItemViewHolder(view, this);
            } else {
                return new TitleViewHolder(inflater.inflate(R.layout.title_item, parent, false), this);
            }
        }

        @Override
        public void onBindViewHolder(final BaseViewHolder holder, int position) {
            holder.bind(position); 
            viewHolder = holder;
        }

        @Override
        public int getItemCount() {
            return items.size();
        }

        class ItemViewHolder extends BaseViewHolder<DocumentDevice> {

            @BindView(R.id.title)
            TextView title;

            @BindView(R.id.subTitle)
            TextView subTitle;

            @BindView(R.id.imageView)
            ImageView arrow;

            @BindView(R.id.addedDeviceError)
            ImageView displayError;

            ItemViewHolder(View view, ItemProvider provider) {
                super(view, provider);
            }

            @Override
            public void bind(final DocumentDevice documentDevice) {
                title.setText(documentDevice.getLocalizedDeviceName());
                subTitle.setText(documentDevice.getId());
                itemView.setTag(documentDevice);
                itemView.setOnClickListener(onClickListener);
                // arrow.setVisibility(View.GONE);
            }

            public void showError(){

            }
        }

        class TitleViewHolder extends BaseViewHolder<String> {

            @BindView(R.id.title)
            TextView title;

            TitleViewHolder(View view, ItemProvider provider) {
                super(view, provider);
            }

            @Override
            public void bind(final String item) {
                title.setText(item);
            }
        }
    }

Я испробовал довольно много разных возможностей, но ни одна из них, похоже, не работает для меня. Этот код здесь моя последняя попытка.

Что я делаю не так?

...