#java #android #android-toast
#java #Android #android-toast
Вопрос:
Я хочу отображать тосты из неактивного класса, который является моим RecyclerView
адаптером.
Что я могу сделать для достижения этого?
Я хочу задать тосты в onLoadingStateChanged()
операторах switch.
Я пробовал некоторые старые коды, но они, похоже, не работают.
Я не хочу, RecylerView
чтобы адаптер находился в MainActivity
Моя активность адаптера:
public class TalesAdapter extends FirestorePagingAdapter<TalesDetails, TalesAdapter.TalesViewHolder> {
public TalesAdapter(@NonNull FirestorePagingOptions<TalesDetails> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull TalesViewHolder holder, int position, @NonNull TalesDetails model) {
holder.bind(model);
}
@NonNull
@Override
public TalesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.talesrecyclerview, parent, false);
return new TalesViewHolder(view);
}
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
case LOADING_MORE:
//toast here
break;
case LOADED:
//toast here
case FINISHED:
//toast here
break;
case ERROR:
//toast here
break;
}
}
public class TalesViewHolder extends RecyclerView.ViewHolder {
private TextView Title;
private TextView Matter;
private TextView Name;
public TalesViewHolder(View itemView ) {
super(itemView);
Name = itemView.findViewById(R.id.tvName);
Title = itemView.findViewById(R.id.tvTitle);
Matter = itemView.findViewById(R.id.tvMatter);
}
public void bind(TalesDetails tales){
Name.setText(tales.name);
Title.setText(tales.title);
Matter.setText(tales.matter);
}
}
}
Ответ №1:
У вас есть две возможности :
1 — Создать Context
переменную
private Context context;
public TalesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
context = parent.getContext();
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.talesrecyclerview, parent, false);
return new TalesViewHolder(view);
}
2 — Использование implementation 'com.blankj:utilcodex:1.29.0'
ToastUtils.showShort("YOUR TEXT HERE");
Ответ №2:
Объявите тип переменной вашего класса Activity и передайте ссылку на activity ко времени построения TalesAdapter
public class TalesAdapter extends FirestorePagingAdapter<TalesDetails, TalesAdapter.TalesViewHolder> {
Context mContext = null;
public TalesAdapter(@NonNull FirestorePagingOptions<TalesDetails> options, Context mContext) {
this.mContext = mContext;
super(options);
}
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
case LOADING_MORE:
Toast.makeText(mContext, "your message", Toast.LENGTH_SHORT).show()
break;
case LOADED:
//toast here
case FINISHED:
//toast here
break;
case ERROR:
//toast here
break;
}
}
}
Ответ №3:
Вы можете создать конструктор в адаптере, подобный:
Context mContext;
public TalesAdapter(@NonNull FirestorePagingOptions<TalesDetails> options, Context mContext) {
this.mContext = mContext;
super(options);
}
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
case LOADING_MORE:
Toast.makeText(mContext, "Taost", Toast.LENGTH_SHORT).show();
break;
case LOADED:
Toast.makeText(mContext, "Taost", Toast.LENGTH_SHORT).show();
break;
case FINISHED:
Toast.makeText(mContext, "Taost", Toast.LENGTH_SHORT).show();
break;
case ERROR:
Toast.makeText(mContext, "Taost", Toast.LENGTH_SHORT).show();
break;
}
}
И в вашей активности, является ли это MainActivity.java
или любым другим, пока этот адаптер находится в RecyclerView или ListView
Context mContext = this;
adapter = new TalesAdapter(mContext);
mRecycler.setAdapter(adapter)