2017-05-30 3 views
-3

Androidアプリを作成していますが、リストビューを構築中です。 各リストアイテムの削除ボタンを使用して各アイテムを削除します。つまり、特定の行の削除ボタンを押すと、同じ行のリスト項目を削除する必要があります。Androidの各削除ボタンをクリックするとイベントエラーが発生する

しかし、私はここでいくつかのバグを見つけました。ビューの削除ボタンを押すと、同じ行のアイテムではなく、ビューの最後のアイテムだけが削除されます。各削除ボタンのイベントアクションが最後のアイテムのIDだけに接続されている理由はわかりません。

ここは私のアダプタコードです。

public View getView(int i, View convertView, ViewGroup parent){ 
    if(convertView == null){ 
     convertView = LayoutInflater.from(context).inflate(R.layout.item,null); 
     viewHolder = new ViewHolder(); 
     viewHolder.nickname_textView = (TextView)convertView.findViewById(R.id.nickname); 
     viewHolder.content_textView = (TextView)convertView.findViewById(R.id.post_content); 
     viewHolder.date_textView = (TextView)convertView.findViewById(R.id.date); 
     viewHolder.company_textView = (TextView)convertView.findViewById(R.id.company); 
     viewHolder.location_textView = (TextView)convertView.findViewById(R.id.location); 
     viewHolder.profile_imageView = (ImageView)convertView.findViewById(R.id.imageView); 
     viewHolder.deleteButton = (Button)convertView.findViewById(R.id.deleteButton); 
     viewHolder.idHolder_textView = (TextView)convertView.findViewById(R.id.idView); 

     convertView.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.nickname_textView.setText(list_itemArrayList.get(i).getNickname()); 
    viewHolder.content_textView.setText(list_itemArrayList.get(i).getContent()); 
    viewHolder.date_textView.setText(list_itemArrayList.get(i).getWrite_date().toString()); 
    viewHolder.location_textView.setText(list_itemArrayList.get(i).getLocation()); 
    viewHolder.company_textView.setText(list_itemArrayList.get(i).getCompany()); 
    viewHolder.profile_imageView.setImageResource(list_itemArrayList.get(i).getProfile_image()); 
    viewHolder.idHolder_textView.setText(""+list_itemArrayList.get(i).getId()); 
    viewHolder.idHolder_textView.setVisibility(View.INVISIBLE); 
    viewHolder.deleteButton.setId(list_itemArrayList.get(i).getId()); 

    viewHolder.deleteButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      String sID = viewHolder.idHolder_textView.getText().toString(); 
      long id = Long.parseLong(sID); 

      UserPosts deletePost = new UserPosts(context); 
      deletePost.open(); 
      deletePost.deleteItem(id); 
      deletePost.close(); 
     } 
    }); 

    return convertView; 
} 

なぜ私のdeleteButton.setOnClickListenerがうまく動作しないのかわかりません。 ありがとうございます。

は、ここに私のアプリケーションのスクリーンショット enter image description here

+0

ポストlogcatで

String sID = viewHolder.idHolder_textView.getText().toString(); long id = Long.parseLong(sID); 

+0

そしてplzは自己がどのようにlist_itemArrayList.remove(i)を使用する方法についての代わりに、リストビュー –

+0

のrecycleview ..use URS更新してくださいこれらの行を置き換えるの内側に試してみてください、あなたのリスナーをクリックしますか? – Prexx

答えて

0

viewHolder.idHolder_textView.getText()リストビューの最後の目に見える項目の値を返しますです。 UserPostsの代わりにこの

long id = list_itemArrayList.get(i).getId(); 
+0

setOnclickListenerメソッドでインデックス 'i'を使用できませんㅠㅠ –

+0

最終変数を作成して初期化します私は、この最終変数を私の代わりに使用します。これは 'final int finalI = i;'です。ボタンをクリックする前にこの行を追加してください。 'long id = list_itemArrayList.get(finalI).getId();' –

+0

これはうまくいきました。ありがとうございました –

関連する問題