更新回收站视图textview?

时间:2017-02-15 14:27:00

标签: android android-fragments android-recyclerview adapter

我的android项目中定义了RecyclerViewAdapter的{​​{1}}如下

RecyclerView

最终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的值为1时,我需要更改Status中显示的文本。

我该怎么做?我应该在我的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){ } } 的值。如果值为1,我该怎么办?

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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,列表中的每一行都有这个接受按钮。因此,在您的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(),但上述方法效率更高。