2017-02-15 161 views
0

我在我的android項目中定義了RecyclerView。該AdapterRecyclerView是如下更新回收站視圖textview?

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(); 
} 
} 

最終TextViewbutAccept具有動態values.I擁有一個具有列Status內部DB。當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,我該怎麼辦?

I saw this question,但是這個不清楚,我無法從中得出任何結論。

+0

'ArrayList dataSet'從哪裏來?從你的sqlite數據庫呢? – pskink

+0

不..它來自於在線數據庫。 – Tyson

+0

'DataModel1'是我從在線數據庫接收的數據模式,'MeetingList'是SQLite使用的數據模式。 – Tyson

回答

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()。

+0

我應該定期調用這些方法還是在變化發生時觸發它們? – Tyson

+0

當你知道你的數據已經改變時你應該打電話給他們。如果您希望定期更新列表,則必須實施檢查數據庫的邏輯或從自己獲取數據的位置。當您檢測到數據已更改時,請使用通知方法,適配器將針對需要更新的行調用onBindViewHolder(...)。 –