【问题标题】:Update the recycler view textview?更新回收站视图 textview?
【发布时间】:2017-02-15 14:26:59
【问题描述】:

我在我的 android 项目中定义了一个 RecyclerViewRecyclerView 对应的Adapter 如下

public class CustomAdapter1 extends RecyclerView.Adapter<CustomAdapter1.MyViewHolder>  {
    private Fragment1 myFrag;
    private ArrayList<DataModel1> dataSet;
    DBHandler db;
    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView butAccept,butReject;
    TextView nick,stat,tit,cat,desc,dt;
    public CardView cardView;
    public MyViewHolder(View itemView) {
        super(itemView);
        this.nick = (TextView) itemView.findViewById(R.id.nick);
        this.stat = (TextView) itemView.findViewById(R.id.stat);
        this.tit = (TextView) itemView.findViewById(R.id.tit);
        this.cat = (TextView) itemView.findViewById(R.id.cat);
        this.desc = (TextView) itemView.findViewById(R.id.desc);
        this.dt = (TextView) itemView.findViewById(R.id.dt);
        this.butAccept = (TextView)itemView.findViewById(R.id.accept_textview);
        cardView = (CardView) itemView.findViewById(R.id.card_view);
        cardView.setOnClickListener(this);
        butAccept.setOnClickListener(this);
        db = new DBHandler(itemView.getContext());
    }

    @Override
    public void onClick(View v) {
        if( v.getId() == butAccept.getId()){
            String x = String.valueOf(dataSet.get(getAdapterPosition()).getMeetId());

            myFrag.showToast(x);
        }

    }

}

public CustomAdapter1(ArrayList<DataModel1> data,Fragment1 frag) {
    this.dataSet = data;
    myFrag = frag;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardfrag1, parent, false);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(final MyViewHolder holder,final int listPosition) {
    TextView nick = holder.nick;
    TextView stat = holder.stat;
    TextView tit = holder.tit;
    TextView cat = holder.cat;
    TextView desc = holder.desc;
    TextView dt= holder.dt;
    nick.setText(dataSet.get(listPosition).getNick());
    stat.setText(dataSet.get(listPosition).getStat());
    tit.setText(dataSet.get(listPosition).getTit());
    cat.setText(dataSet.get(listPosition).getCat());
    desc.setText(dataSet.get(listPosition).getDesc());
    dt.setText(dataSet.get(listPosition).getDt());
}


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

最终的TextView butAccept 具有动态值。我有一个内部数据库,其中包含Status 列。当Status 的值为1 时,我需要更改TextView butAccept 中显示的文本。

我应该怎么做?我应该在我的CustomAdapter 中还是在我使用适配器的片段中编写一个函数?

在我的片段中,我有一个功能:

 private void checkTheAcceptStatus(int x){
        int status = db.getMeetingStatus(x);
        Toast.makeText(getActivity(),String.valueOf(status),Toast.LENGTH_SHORT).show();
        if(status == 1){

        }

    }

每次向适配器添加新项目时都会调用此函数。正在正确查询内部数据库,并且是否正在返回 Status 的值。如果值为 1,我该怎么办?

saw this question, 但这不清楚,我无法从中得出任何结论。

【问题讨论】:

  • ArrayList&lt;DataModel1&gt; dataSet 来自哪里?也来自您的 sqlite 数据库?
  • No..来自在线数据库。
  • DataModel1 是我从在线数据库接收的数据架构,MeetingList 是 SQLite 使用的数据架构。

标签: android android-fragments android-recyclerview adapter


【解决方案1】:

如果我理解正确,您列表中的每一行都有这个接受按钮。因此,在您的 onBindViewHolder() 中,您不能根据状态变量的状态设置按钮文本。当您检测到数据库中的更改时,您可以根据需要使用提供的各种通知方法:notifyItemChanged(...)、notifyItemRangeChanged(...)、notifyItemAdded(...)、notifyItemRemoved(...) 等。 onBindViewHolder 应该如下所示:

@Override
public void onBindViewHolder(final ViewHolder vh, int position) {
    if(dataSet.get(position).getStatus() == 1){
        vh.butAccept.setText("Your status 1 case text here");
    } else {
        vh.butAccept.setText("Your status not 1 case text here"); 
    }
}

如果你想刷新整个列表,你也可以只使用 notifyDataSetChanged(),但上面的方法更有效。

【讨论】:

  • 我应该定期调用这些方法还是在更改发生时触发它们?
  • 当您知道您的数据已更改时,您应该打电话给他们。如果您希望您的列表定期更新,您必须实施检查数据库或您从哪里获取数据的逻辑。当您检测到数据已更改时,请使用通知方法,适配器将为需要更新的行调用 onBindViewHolder(...)。
猜你喜欢
  • 2021-12-21
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多