1

リスト ビューをテキスト ビューとイメージ ビューで表示するカスタム アダプターを使用しています。

ここに画像の説明を入力

これが私の出力画面です。リストビューからアイテムを削除したいのですが、以下のコードを使用してそれを達成します

 holder.img_delete.setTag(tempValues.getCompanyName());
    holder.img_delete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            eventDB.open();
            eventDB.DeleteByText(view.getTag().toString());
            eventDB.close();
            Toast.makeText(ctx, "Deleted", 10).show();
            notifyDataSetChanged();


        }
    });

問題は、削除が実行された後に listView がアイテムを更新しないことです。提案をお願いします。

@ダンテ

public class CustomAdapter extends BaseAdapter   implements OnClickListener {

private ArrayList data;
private static LayoutInflater inflater=null;
public Resources res;
ListModel tempValues=null;
int i=0;
Context ctx;
EventCate_DBAdapter eventDB;

public CustomAdapter(Context c, ArrayList d,Resources resLocal) {



    data=d;
    res = resLocal;
    ctx=c;

    inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    eventDB = new EventCate_DBAdapter(ctx);
}


public int getCount() {

    if(data.size()<=0)
        return 1;
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}


public static class ViewHolder{

    public TextView text;

    public static ImageView img_edit,img_delete;

}


public View getView(int position, View convertView, ViewGroup parent) {

    View vi=convertView;
    ViewHolder holder;

    if(convertView==null){ 


        vi = inflater.inflate(R.layout.tabitem, null); 


        holder=new ViewHolder();
        holder.text=(TextView)vi.findViewById(R.id.tv_event_cat);
        holder.img_edit=(ImageView)vi.findViewById(R.id.iv_edit);
        holder.img_delete=(ImageView)vi.findViewById(R.id.iv_delete);

        vi.setTag(holder);
    }
    else  
        holder=(ViewHolder)vi.getTag();

    if(data.size()<=0)
    {
        holder.text.setText("No Data");

    }
    else
    {

        tempValues=null;
        tempValues = (ListModel) data.get(position);


         holder.text.setText(tempValues.getCompanyName());



         vi.setOnClickListener(new OnItemClickListener(position));



    }

    holder.img_edit.setTag(tempValues.getCompanyName());
    holder.img_edit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            Toast.makeText(ctx, "Edit = "+view.getTag().toString(), Toast.LENGTH_SHORT).show();

        }
    });
    holder.img_delete.setTag(tempValues.getCompanyName());
    holder.img_delete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            eventDB.open();
            eventDB.DeleteByText(view.getTag().toString());
            eventDB.close();
            Toast.makeText(ctx, "Deleted", 10).show();
            notifyDataSetChanged();
            notifyDataSetInvalidated();


        }
    });

    return vi;
}

@Override
public void onClick(View v) {
        Log.v("CustomAdapter", "=====Row button clicked");
}


private class OnItemClickListener  implements OnClickListener{           
    private int mPosition;

    OnItemClickListener(int position){
         mPosition = position;
    }

    @Override
    public void onClick(View arg0) {
       SettingsActivity sct = (SettingsActivity)ctx;
        sct.onItemClick(mPosition);
    }               
}  

}

アイテムの削除は正常に機能します。リスト アイテムを更新するための別のソリューションが必要です。

これは私のコーディングです

eventDB.open();

            eventDB.update(Id.get(0), etEventCategory.getText().toString());

            eventDB.close();
            data.set(pos,etEventCategory.getText().toString());
            dialog.dismiss();

            notifyDataSetChanged();
            notifyDataSetInvalidated();
4

2 に答える 2

1

datanotifyDataSetChanged() を呼び出す前に、配列からもオブジェクトを削除する必要があります

このコードに変更

holder.img_delete.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        eventDB.open();
        eventDB.DeleteByText(view.getTag().toString());
        data.remove(position); // change position to final
        eventDB.close();
        Toast.makeText(ctx, "Deleted", 10).show();
        notifyDataSetChanged();
        //notifyDataSetInvalidated();


    }
});
于 2013-10-11T07:28:00.163 に答える