2017-06-11 1 views
0

私はRecyclerViewに含まれるアクティビティを1つ持っています。 新しい項目を挿入するために、カスタム2 EDITTEXTに含まれているダイアログとユーザから必要ないくつかの情報を取得するために使用されるものスピナーがあり、その後、戻ってこの情報を返し、recyclerView でそれを表示するには、Android - RecyclerView - アイテムポジションの問題

enter image description here

画像を見ます

これは新しいアイテムを挿入するために使用したカスタムダイアログウィジットです。 各アイテムの番号が表示されていれば、今まで問題はありません。

enter image description here

ソフト入力(キーボード)が表示されたときに、その後、

enter image description here

はの位置を参照してください

いくつかのことは、それらのいくつかの位置が変更され、項目に起こるがあります最後のアイテム!それは、ダイアログ上のボタンをキャンセル

enter image description here

を変更し

は何もしない、

これは後に、私が考えるカスタムダイアログ

enter image description here

を却下recycleViewですリサイクル機能のために問題が発生しています。 recyclerViewに使用

アダプタ:

private class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> 
{ 
    private View courseView; 
    private TextView courseNo; 
    private TextView courseName ; 
    private TextView courseHours; 
    private TextView courseGrades; 

    protected class ViewHolder extends RecyclerView.ViewHolder{ 

     public ViewHolder(View itemView) { 
      super(itemView); 
      courseView = itemView; 
     } 
    } 

    @Override 
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     courseView = LayoutInflater 
       .from(parent.getContext()).inflate(R.layout.view_course,parent,false); 

     courseNo = (TextView)courseView.findViewById(R.id.view_course_textView_no); 
     courseName = (TextView)courseView.findViewById(R.id.view_course_textView_name); 
     courseHours = (TextView)courseView.findViewById(R.id.view_course_textView_hours_value); 
     courseGrades = (TextView)courseView.findViewById(R.id.view_course_textView_grade_value); 

     ViewHolder holder = new ViewHolder(courseView); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerAdapter.ViewHolder holder, int position) { 
     final int coursePosition = position; 
     courseNo.setText(position+1+""); 
     courseName.setText(courses.get(position).getName()); 
     courseHours.setText(courses.get(position).getHours()+""); 
     courseGrades.setText(courses.get(position).getGrade()+""); 

     courseView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       editDialog(coursePosition); 
      } 
     }); 


    } 

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

どこコースはアイテム

+0

アダプターのコードはここに投稿できますか?あなたの問題はおそらくバインドされているViewHolder –

+0

@ VarvaraKalinina ok –

答えて

1

さて、あなたは間違ったアダプタを実装しているのリストです。

はViewHolderのこの例を考えてみましょう:

class CustomViewHolder extends RecyclerView.ViewHolder { 
     protected ImageView imageView; 
     protected TextView textView; 

     public CustomViewHolder(View view) { 
      super(view); 
      this.imageView = (ImageView) view.findViewById(R.id.thumbnail); 
      this.textView = (TextView) view.findViewById(R.id.title); 
     } 
    } 

ビュー変数はViewHolderの分野ではなく、アダプターでなければなりません。あなたの場合

private View courseView; 
private TextView courseNo; 
private TextView courseName ; 
private TextView courseHours; 
private TextView courseGrades; 

は、アダプターではなくViewHolderのフィールドでなければなりません。

設定onClickListenerは、でなく、onBindViewHolder()になる必要があります。そうしないと、同じアイテムに対して複数のonClickListenerが繰り返されることになります。

そして、私はあなたがView courseViewへの言及をまったく保持する必要はないと思います。

関連する問題