2017-02-15 9 views
0

私はRecyclerViewを私のアンドロイドプロジェクトで定義しました。リサイクラービューの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を持っている持っている次のようにRecyclerViewためAdapterです。 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){ 

     } 

    } 

この関数は、新しいアイテムがアダプタに追加されるたび呼ばれています。内部DBが正しく照会されており、Statusの値が戻されています。値が1の場合はどうすればよいですか?

I saw this question,しかし、これは不明であり、私はこれから結論に至ることができませんでした。

+0

「ArrayList dataSet」はどこから来ましたか?あなたのsqlite DBからも? – pskink

+0

No..オンラインDBからのものです。 – Tyson

+0

'DataModel1'はオンラインDBから受け取ったデータのスキーマで、' MeetingList'はSQLiteで使用されているデータのスキーマです。 – Tyson

答えて

0

あなたのリストのすべての行が正しく理解されていれば、この受け入れボタンがあります。したがって、あなたのonBindViewHolder()では、ステータス変数の状態に応じてボタンのテキストを設定することはできません。データベースの変更を検出すると、必要に応じて提供されるさまざまな通知メソッドを使用できます:notifyItemChanged(...)、notifyItemRangeChanged(...)、notifyItemAdded(...)、notifyItemRemoved(...)など

@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は次のようになります。

+0

これらのメソッドを定期的に呼び出すべきですか、変更が発生したときにトリガーされますか? – Tyson

+0

データが変更されたことがわかったら、それらを呼び出す必要があります。リストを定期的に更新するには、データベースをチェックするロジックを実装するか、自分でデータを取得する場所を実装する必要があります。データが変更されたことを検出すると、通知メソッドを使用すると、アダプタは更新が必要な行に対してonBindViewHolder(...)を呼び出します。 –

関連する問題