2017-06-24 9 views
0

私は、cardviewを保持するrecyclerviewを持っています。私はラジオボタンと2つの時間ピッカーを持っていて、2つのtextview.iはボタンをクリックするとrecyclerviewに新しいカードを追加する必要があります。私はそのためのadapteを実装し、ボタンの項目をクリックするとリストに追加されます。recyclerviewリストに新しい項目を追加するときにリフレッシュされる

probleが、私はカードを追加し、時間や選択のラジオボタンを変更したときに、私はそれ

得ることができますどのように、古いカードはrefteshed取得し、私が入力したDTAがなくなって再び追加ボタンをクリックして、で、私はそれが

をどのように動作するか、いくつかのスクリーンショットを持っている私はこの問題を解決するために助けてください、ここで

が私のコードでありがとう:

アダプターコード

あなたが新しい項目を追加し、 notifyDataSetChangedメソッドを呼び出すときに毎回アダプタを設定しているので、
@Override 
    public LabourWorkAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.labour_work_card, parent, false); 
    return new LabourWorkAdapter.ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(final LabourWorkAdapter.ViewHolder holder, final int position) { 
    final LabourWorkList listItem = labourWork.get(position); 

    holder.fromTime.setText(listItem.getFromDate()); 
    holder.toTime.setText(listItem.getToDate()); 

    //  holder.cDay.setText(listItem.getFullDay()); 
    holder.fromTimePicker.setOnClickListener(new View.OnClickListener() { 
    int hour_x = 0; 
    int minute_x = 0; 

    @Override 
    public void onClick(View view) { 
    TimePickerDialog mTimePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { 
    @Override 
    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 
    String hr, mn, timeMode = "AM"; 
    if (selectedHour > 12){ 
    selectedHour = selectedHour-12; 
    timeMode = "PM"; 
    } 
    if (selectedHour < 10){ 
    hr = "0"+selectedHour; 
    }else{ 
    hr = ""+selectedHour; 
    } 
    if (selectedMinute < 10){ 
    mn = "0"+selectedMinute; 
    }else{ 
    mn = ""+selectedMinute; 
    } 
    holder.fromTime.setText(hr + ":" + mn + timeMode); 
    } 
    }, hour_x, minute_x, false); 
    mTimePicker.setTitle("Select Time"); 
    mTimePicker.show(); 
    } 
    }); 

    holder.toTimePicker.setOnClickListener(new View.OnClickListener() { 
    int hour_x = 0; 
    int minute_x = 0; 

    @Override 
    public void onClick(View view) { 
    TimePickerDialog mTimePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { 
    @Override 
    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 
    String hr, mn, timeMode = "AM"; 
    if (selectedHour > 12){ 
    selectedHour = selectedHour-12; 
    timeMode = "PM"; 
    } 
    if (selectedHour < 10){ 
    hr = "0"+selectedHour; 
    }else{ 
    hr = ""+selectedHour; 
    } 
    if (selectedMinute < 10){ 
    mn = "0"+selectedMinute; 
    }else{ 
    mn = ""+selectedMinute; 
    } 
    holder.toTime.setText(hr + ":" + mn + timeMode); 
    } 
    }, hour_x, minute_x, false); 
    mTimePicker.setTitle("Select Time"); 
    mTimePicker.show(); 
    } 
    }); 

    holder.delete.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    labourWork.remove(position); 
    notifyItemRemoved(position); 
    notifyDataSetChanged(); 
    notifyItemRangeChanged(position, labourWork.size()); 
    CharSequence text = "Position "+ position; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
    } 
    }); 
    //  holder.labourWorkDay 


    } 



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


    public class ViewHolder extends RecyclerView.ViewHolder { 
    TextView fromTime, toTime; 
    Button fromTimePicker, toTimePicker; 
    ImageView delete; 

    public ViewHolder(View itemView) { 
    super(itemView); 

    fromTime = (TextView) itemView.findViewById(R.id.fromTime); 
    toTime = (TextView) itemView.findViewById(R.id.toTime); 
    fromTimePicker = (Button) itemView.findViewById(R.id.fromTimePicker); 
    toTimePicker = (Button) itemView.findViewById(R.id.toTimePicker); 
    delete = (ImageView) itemView.findViewById(R.id.deleteLabourCard); 
    } 
    } 

ボタンクリックリスナー

rId.setText(tempLabourId); 

recyclerView = (RecyclerView) findViewById(R.id.workDetailsRecycler); 
recyclerView.setHasFixedSize(true); 
recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

workList = new ArrayList<>(); 

addItem = (FloatingActionButton) findViewById(R.id.addLabor); 

addItem.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View view) { 
addToRecyclerView(sPosition); 
sPosition++; 
} 
}); 


public void addToRecyclerView(int position){ 
LabourWorkList listItem = new LabourWorkList(position); 
recyclerView.findViewHolderForAdapterPosition(position); 
workList.add(listItem); 

adapter = new LabourWorkAdapter(workList, LabourWork.this); 
recyclerView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 
} 
+1

を一覧表示し、呼び出すために新しい項目を追加し、一度だけのアダプタを設定し、これを解決するには

は、[MCVE]提示してください。特に、クラスがないため、コードにコンパイラー・エラーがあります。また、書式を修正してください。 –

+0

あなたは 'notifyDataSetChanged()'だけでなく、あなたの要求に合ったさまざまなメソッドをアダプタで見ることもできます。 https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html – Raghunandan

答えて

1

Recyclerviewは、たびに更新なっています。その後、

adapter.notifyItemRangeInserted(lastListSize, newListSize); 
関連する問題