Android OnClick in BaseAdapter notifyDataSetChanged

Android OnClick in BaseAdapter notifyDataSetChanged,android,android-fragments,baseadapter,notifydatasetchanged,Android,Android Fragments,Baseadapter,Notifydatasetchanged,在我的BaseAdapter中,我实现了一个OnClickListener,当按下它时,它将删除一条记录。一旦删除,我希望它刷新listview,由一个片段托管 基本适配器: public class TransactionListAdapter extends BaseAdapter { private Context mContext; static Cursor cursor; static DatabaseHelper db; String table;

在我的BaseAdapter中,我实现了一个OnClickListener,当按下它时,它将删除一条记录。一旦删除,我希望它刷新listview,由一个片段托管

基本适配器:

public class TransactionListAdapter extends BaseAdapter {

    private Context mContext;
    static Cursor cursor;
    static DatabaseHelper db;
    String table;

    public TransactionListAdapter(Context context, Cursor cur, String tab) {
        super();
        mContext = context;
        cursor = cur;
        db = new DatabaseHelper(context);
        table = tab;
        cursor = db.getTransactions(table);
    }

    public int getCount() {
        return cursor.getCount();
    }

    public View getView(final int position, View view, ViewGroup parent) {
        ViewHolder holder;

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // SMOOTH SCROLLING
        if(view == null) {
            view = inflater.inflate(R.layout.rowlayout, null);

            holder = new ViewHolder();
            holder.tvDate = (TextView) view.findViewById(R.id.tvDate);
            holder.tvMemo = (TextView) view.findViewById(R.id.tvMemo);
            holder.tvAmount = (TextView) view.findViewById(R.id.tvAmount);
            holder.ivDelete = (ImageView) view.findViewById(R.id.ivDelete);

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

        // MOVE CURSOR TO REQUIRED POSITION
        cursor.moveToPosition(position);

        final int id = Integer.parseInt(cursor.getString(cursor.getColumnIndex("_id")));

        // FETCH THE INFORMATION FOR EACH VIEW
        String transactionDate = cursor.getString(cursor.getColumnIndex("timestamp"));
        String transactionMemo = cursor.getString(cursor.getColumnIndex("memo"));
        String transactionCredit = cursor.getString(cursor.getColumnIndex("credit"));
        String transactionDebit = cursor.getString(cursor.getColumnIndex("debit"));

        holder.tvDate.setText(transactionDate);
        holder.tvMemo.setText(transactionMemo);
        if (transactionCredit == null) {
            holder.tvAmount.setTextColor(Color.RED);
            holder.tvAmount.setText("(" + transactionDebit + ")");
        } else {
            holder.tvAmount.setTextColor(Color.BLACK);
            holder.tvAmount.setText(transactionCredit);
        }

        holder.ivDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                db.deleteTransaction(table, id);
                notifyDataSetChanged();

            }

          });
        return view;

    }

    public void setTable(String tab) {
        //table = tab;

        //Log.d("adapter", table);
    }

    public static class ViewHolder {
        public TextView tvDate;
        public TextView tvMemo;
        public TextView tvAmount;
        public ImageView ivDelete;
    }

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

    public long getItemId(int position) {
        return position;
    }
}
以下是承载listview的我的片段:

public class TransactionListFragment extends Fragment {

    DatabaseHelper db;
    SimpleCursorAdapter adapter;
    ListView listContent;
    Cursor cursor;
    private Context mContext;
    TransactionListAdapter transactionListAdapter;
    String table;

    public TransactionListFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View rootView = inflater.inflate(R.layout.transaction_list_fragment, container, false);
        table = getActivity().getIntent().getExtras().getString("table");

        listContent = (ListView) rootView.findViewById(R.id.list);
        mContext = getActivity();
        db = new DatabaseHelper(mContext);

        transactionListAdapter = new TransactionListAdapter(mContext, cursor, table);

        listContent.setAdapter(transactionListAdapter);

        return rootView;
    }


    public void onActivityCreated() {

        table = getArguments().getString("table");
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public void onSaveInstanceState(Bundle savedState) {
        super.onSaveInstanceState(savedState);

    }

}
我怀疑我需要将notifyDataSetChanged()放在片段中,而不是在适配器中,但我不确定它需要放在哪里,或者如何实现它

任何帮助都将不胜感激!谢谢

请尝试以下代码

public class TransactionListFragment extends Fragment {

DatabaseHelper db;
SimpleCursorAdapter adapter;
ListView listContent;
Cursor cursor;
private Context mContext;
TransactionListAdapter transactionListAdapter;
String table;
ArrayList<String> listTime;
ArrayList<String> listMemo;
ArrayList<String> listCredit;
ArrayList<String> listDebit;


public TransactionListFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.transaction_list_fragment, container, false);
    table = getActivity().getIntent().getExtras().getString("table");

    listContent = (ListView) rootView.findViewById(R.id.list);
    mContext = getActivity();
    db = new DatabaseHelper(mContext);

    listTime = new ArrayList<String>();
    listMemo = new ArrayList<String>();
    listCredit = new ArrayList<String>();
    listDebit = new ArrayList<String>();

    cursor = db.getTransactions(table);     
    cursor.moveToFirst();
    while(cursor.moveToNext()){
        listTime.add(cursor.getString(cursor.getColumnIndex("timestamp")));
        listMemo.add(cursor.getString(cursor.getColumnIndex("memo")));
        listCredit.add(cursor.getString(cursor.getColumnIndex("credit")));
        listDebit.add(cursor.getString(cursor.getColumnIndex("debit")));
    }

    transactionListAdapter = new TransactionListAdapter(mContext, listTime, listMemo, listCredit, listDebit, table);

    listContent.setAdapter(transactionListAdapter);

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

                if(view.getId() = view.findeViewById(ID FOR ivDelete IMAGEVIEW) ){
                    db.deleteTransaction(table, id);
                    cursor = db.getTransactions(table);     
                    cursor.moveToFirst();
                    while(cursor.moveToNext()){
                        listTime.add(cursor.getString(cursor.getColumnIndex("timestamp")));
                        listMemo.add(cursor.getString(cursor.getColumnIndex("memo")));
                        listCredit.add(cursor.getString(cursor.getColumnIndex("credit")));
                        listDebit.add(cursor.getString(cursor.getColumnIndex("debit")));
                    }
                    /*
                    transactionListAdapter = new TransactionListAdapter(mContext, listTime, listMemo, listCredit, listDebit, table);
                    listContent.setAdapter(transactionListAdapter);
                    */

                    ( (BaseAdapter) listContent.getAdapter()).notifyDataSetChanged();
                }


            }
    });

    return rootView;
}


public void onActivityCreated() {

    table = getArguments().getString("table");
}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Override
public void onSaveInstanceState(Bundle savedState) {
    super.onSaveInstanceState(savedState);

}

}
公共类TransactionListFragment扩展了片段{
数据库辅助数据库;
SimpleCursorAdapter适配器;
列表视图列表内容;
光标;
私有上下文;
TransactionListAdapter TransactionListAdapter;
字符串表;
ArrayList列表时间;
ArrayList列表备忘录;
ArrayList listCredit;
ArrayList列表借方;
PublicTransactionListFragment(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
super.onCreateView(充气机、容器、保存状态);
视图根视图=充气机。充气(R.layout.transaction\u list\u片段,容器,false);
table=getActivity().getIntent().getExtras().getString(“表格”);
listContent=(ListView)rootView.findviewbyd(R.id.list);
mContext=getActivity();
db=新的DatabaseHelper(mContext);
listTime=新的ArrayList();
listMemo=新的ArrayList();
listCredit=新的ArrayList();
listDebit=newarraylist();
cursor=db.getTransactions(表);
cursor.moveToFirst();
while(cursor.moveToNext()){
add(cursor.getString(cursor.getColumnIndex(“timestamp”));
添加(cursor.getString(cursor.getColumnIndex(“memo”));
add(cursor.getString(cursor.getColumnIndex(“credit”));
添加(cursor.getString(cursor.getColumnIndex(“debit”));
}
transactionListAdapter=新建transactionListAdapter(mContext、listTime、listMemo、listCredit、listDebit、table);
setAdapter(transactionListAdapter);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
if(view.getId()=view.finDeviceWBYID(ivDelete IMAGEVIEW的ID)){
db.deleteTransaction(表,id);
cursor=db.getTransactions(表);
cursor.moveToFirst();
while(cursor.moveToNext()){
add(cursor.getString(cursor.getColumnIndex(“timestamp”));
添加(cursor.getString(cursor.getColumnIndex(“memo”));
add(cursor.getString(cursor.getColumnIndex(“credit”));
添加(cursor.getString(cursor.getColumnIndex(“debit”));
}
/*
transactionListAdapter=新建transactionListAdapter(mContext、listTime、listMemo、listCredit、listDebit、table);
setAdapter(transactionListAdapter);
*/
((BaseAdapter)listContent.getAdapter()).notifyDataSetChanged();
}
}
});
返回rootView;
}
ActivityCreated()上的公共无效{
table=getArguments().getString(“table”);
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRetainInstance(真);
}
@凌驾
SaveInstanceState上的公共无效(Bundle savedState){
super.onSaveInstanceState(savedState);
}
}
适配器文件->

public class TransactionListAdapter extends BaseAdapter {

private Context mContext;
ArrayList<String> listTime;
ArrayList<String> listMemo;
ArrayList<String> listCredit;
ArrayList<String> listDebit;
String table;

public TransactionListAdapter(Context context, ArrayList<String> listTime, ArrayList<String> listMemo, 
        ArrayList<String> listCredit,ArrayList<String> listDebit, String tab) {

    super();
    mContext = context;
    this.listTime = listTime;
    this.listMemo = listMemo;
    this.listCredit = listCredit;
    this.listDebit = listDebit;
    table = tab;
}

public View getView(final int position, View view, ViewGroup parent) {
    ViewHolder holder;

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // SMOOTH SCROLLING
    if(view == null) {
        view = inflater.inflate(R.layout.rowlayout, null);

        holder = new ViewHolder();
        holder.tvDate = (TextView) view.findViewById(R.id.tvDate);
        holder.tvMemo = (TextView) view.findViewById(R.id.tvMemo);
        holder.tvAmount = (TextView) view.findViewById(R.id.tvAmount);
        holder.ivDelete = (ImageView) view.findViewById(R.id.ivDelete);

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

    // MOVE CURSOR TO REQUIRED POSITION
    cursor.moveToPosition(position);

    final int id = Integer.parseInt(cursor.getString(cursor.getColumnIndex("_id")));

    // FETCH THE INFORMATION FOR EACH VIEW
    String transactionDate = listTime.get(position)
    String transactionMemo = listMemo.get(position)
    String transactionCredit = listCredit.get(position)
    String transactionDebit = listDebit.get(position)

    holder.tvDate.setText(transactionDate);
    holder.tvMemo.setText(transactionMemo);
    if (transactionCredit == null) {
        holder.tvAmount.setTextColor(Color.RED);
        holder.tvAmount.setText("(" + transactionDebit + ")");
    } else {
        holder.tvAmount.setTextColor(Color.BLACK);
        holder.tvAmount.setText(transactionCredit);
    }

    holder.ivDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            db.deleteTransaction(table, id);
            notifyDataSetChanged();

        }

      });
    return view;

}

public void setTable(String tab) {
    //table = tab;

    //Log.d("adapter", table);
}

public static class ViewHolder {
    public TextView tvDate;
    public TextView tvMemo;
    public TextView tvAmount;
    public ImageView ivDelete;
}

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

public long getItemId(int position) {
    return position;
}
}
public class TransactionListAdapter扩展BaseAdapter{
私有上下文;
ArrayList列表时间;
ArrayList列表备忘录;
ArrayList listCredit;
ArrayList列表借方;
字符串表;
公共事务列表适配器(上下文上下文、ArrayList listTime、ArrayList listMemo、,
ArrayList listCredit、ArrayList listDebit、字符串选项卡){
超级();
mContext=上下文;
this.listTime=listTime;
this.listMemo=listMemo;
this.listCredit=listCredit;
this.listDebit=listDebit;
表=选项卡;
}
公共视图getView(最终整数位置、视图视图、视图组父视图){
视窗座;
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
//平滑滚动
如果(视图==null){
视图=充气机。充气(R.layout.rowlayout,null);
holder=新的ViewHolder();
holder.tvDate=(TextView)view.findViewById(R.id.tvDate);
holder.tvMemo=(TextView)view.findViewById(R.id.tvMemo);
holder.tvAmount=(TextView)view.findViewById(R.id.tvAmount);
holder.ivDelete=(ImageView)view.findViewById(R.id.ivDelete);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
//将光标移动到所需位置
光标。移动位置(位置);
final int id=Integer.parseInt(cursor.getString(cursor.getColumnIndex(“\u id”));
//获取每个视图的信息
String transactionDate=listTime.get(位置)
String transactionMemo=listMemo.get(位置)
String transactionCredit=listCredit.get(位置)
String transactionDebit=listDebit.get(位置)
holder.tvDate.setText(交易日期);
holder.tvMemo.setText(交易备忘录);
如果(transactionCredit==null){
holder.tvAmount.setTextColor(Color.RED);
holder.tvAmount.setText(“(“+交易借方+”);
}否则{
holder.tvAmount.setTextColor(Color.BLACK);
holder.tvAmount.setText(交易信用证);
}
holder.ivDelete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
db.deleteTransaction(表,id);
notifyDataSetChanged();
}
});
返回视图;
}
公共void可设置(字符串选项卡){
holder.ivDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder((Activity) v.getContext());
                alertDialog.setMessage("Are you sure you want to delete?")
                        .setCancelable(false)
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener(){
                            public void onClick(DialogInterface dialog, int id){
                                db.deleteTransaction(table, deleteId);
                                cursor = db.getTransactions(table);
                                notifyDataSetChanged();
                            }
                        })
                        .setNegativeButton("No", new DialogInterface.OnClickListener(){
                            public void onClick(DialogInterface dialog, int id){
                                dialog.cancel();
                            }
                        });
                AlertDialog alert = alertDialog.create();
                alert.show();