0

リストビューとアダプタ、およびデータベースから行を削除しようとしています。これが、adapter.notifyDataSetChanged();を呼び出しているWebMessageAdapter.javaクラスです。ただし、リストは更新されません。他のアクティビティから戻ると、リストには削除されたばかりのデータが再び表示されます。何が足りないのか、どこにあるのかわかりません。

ありがとう。

package com.utility;

import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.activity.ContactInfoActivity;
import com.activity.MYApplication;
import com..activity.R;
import com.database.WebMessageCore;

public class WebMessageAdapter extends ArrayAdapter<WebMessageCore> implements
        OnClickListener {

    Context _Context;
    ArrayList<WebMessageCore> _WebMsgList;
    WebMessageCore _WebMsgCore;
    TextView _MsgContent;
    private LayoutInflater mInflater;
    ImageView Arrow;
    ImageView imgDel;

    MYApplication application;
    WebMessageCore selectedWebMsgCore;

    public WebMessageAdapter(Context context, int resource,
            ArrayList<WebMessageCore> contactList) {

        super(context, resource, contactList);
        _Context = context;
        _WebMsgList = contactList;
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return _WebMsgList.size();
    }

    public WebMessageCore getItem(int position) {
        return _WebMsgList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_row_view, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.name);
            holder.txtmessage = (TextView) convertView
                    .findViewById(R.id.meassage);
            holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);
            holder.txtdate = (TextView) convertView.findViewById(R.id.datetime);
            holder.Arrow = (ImageView) convertView
                    .findViewById(R.id.settingArrow);
            holder.imgDelete = (ImageView) convertView.findViewById(R.id.dlet);

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

        _WebMsgCore = _WebMsgList.get(position);
        holder.txtName.setText(_WebMsgCore.getName());
        holder.txtmessage.setText(_WebMsgCore.getMessage());
        holder.txtPhone.setText(_WebMsgCore.getMobileNo());
        holder.txtdate.setText(_WebMsgCore.getRecDate());

        holder.imgDelete.setTag(_WebMsgCore);
        holder.imgDelete.setOnClickListener(this);
        holder.Arrow.setTag(_WebMsgCore);
        holder.Arrow.setOnClickListener(this);
        return convertView;
    }

    static class ViewHolder {
        ImageView Arrow;
        TextView txtName;
        TextView txtmessage;
        TextView txtPhone;
        TextView txtdate;
        ImageView imgDelete;

    }

    public WebMessageCore getSelectedWebMsgCore() {
        return selectedWebMsgCore;
    }

    public void setSelectedWebMsgCore(WebMessageCore selectedWebMsgCore) {
        this.selectedWebMsgCore = selectedWebMsgCore;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.dlet:
            WebMessageCore tempWebMsgCore = (WebMessageCore) v.getTag();
            _WebMsgList.remove(tempWebMsgCore);   
            adapter.notifyDataSetChanged();
            break;
        case R.id.settingArrow:
            callContactInfoActivity(v);
            break;
        default:
            break;
        }

    }



    private void callContactInfoActivity(View v) {
        WebMessageCore tempWebMsgCore = (WebMessageCore) v.getTag();
        WebMessageAdapter.this.setSelectedWebMsgCore(tempWebMsgCore);
        Intent newActivity = new Intent(_Context, ContactInfoActivity.class);
        newActivity.putExtra("id", tempWebMsgCore.getId());
        newActivity.putExtra("name", tempWebMsgCore.getName());
        newActivity.putExtra("message", tempWebMsgCore.getMessage());
        newActivity.putExtra("mobilenumber", tempWebMsgCore.getMobileNo());
        _Context.startActivity(newActivity);
    }

}
4

3 に答える 3

0

への変更:

WebMessageAdapter.this.notifyDataSetChanged();

編集:

を削除し、public void onClick(View v) {}次のように変更します。

holder.imgDelete.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        _WebMsgList.remove(position);   
        WebMessageAdapter.this.notifyDataSetChanged();
    }

});
于 2012-05-24T06:53:19.010 に答える
0

inメソッド_WebMsgCoreにのモデルオブジェクトを追加しないでください。その代わりに、コールバックメソッドとコールバックメソッドを追加して、タグから位置を取得し、受け取ったから削除して、アダプタを呼び出します。holder.imgDelete.setTag(_WebMsgCore);getView()positionholder.imgDelete.setTag(position)onClick()itempositionnotifyDataSetChanged()

これで問題が解決することを願っています。

于 2012-05-24T07:08:47.083 に答える
0

convertView の seton onclick リスナーを実装する必要があります。

convertView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    _WebMsgList.remove(position);   
    WebMessageAdapter.this.notifyDataSetChanged();
}

});

于 2012-05-24T07:58:58.010 に答える