【问题标题】:Displaying toast from a non activity class显示非活动类的吐司
【发布时间】:2020-08-23 14:03:08
【问题描述】:

我想显示来自我的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);

        }
    }
}

【问题讨论】:

    标签: java android android-toast


    【解决方案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】:

      声明YourActivity类的Variable类型,并在构造TalesAdapter时传递activity引用

      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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-28
          • 1970-01-01
          • 2019-07-02
          相关资源
          最近更新 更多