簡體   English   中英

在Android中刷新ListAdapter

[英]Refresh ListAdapter in Android

嘗試在Android中刷新列表視圖時遇到問題。 這是我的onCreate方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.transaction_rec);
    context = this;
    listview = (ListView) findViewById(R.id.listview);
    builtListView();
}

public void builtListView() {
    DatabaseAdapter mDbHelper = new DatabaseAdapter(this);
    mDbHelper.createDatabase();
    mDbHelper.open();
    TransactionRecController trc = new TransactionRecController(
            mDbHelper.open());

    ArrayList<TransactionRecModel> trans_list = trc
            .getTransactionRec(session_userID);

    for (int i = 0; i < trans_list.size(); i++) {
        String date = trans_list.get(i).getDate();
        String categoryName = trans_list.get(i).getCategory();
        String transDesc = trans_list.get(i).getTransDescription();

        TransactionRecModel _TransModel = new TransactionRecModel();

        _TransModel.setDate(date);
        _TransModel.setCategory(categoryName);
        _TransModel.setTransDescription(transDesc);

        _translist.add(_TransModel);
    }
    // Set the data into listview
    listview.setAdapter(new ListAdapter(this));

    mDbHelper.close();
}

然后,我創建一個rebuildListView方法以將listAdapter設置為null,然后再次調用buildListView方法:

public void rebuildListView() {
    listview.setAdapter(null);
    builtListView();
}

當我成功地將記錄插入數據庫時​​,我通過調用rebuildListView刷新列表視圖:

TransactionRecController trc = new TransactionRecController(
                mDbHelper.open());
        if (trc.addTransactionRec(trm)) {
            Toast.makeText(TransactionRec.this,
                    "Transaction Record Added successfully.",
                    Toast.LENGTH_LONG).show();
            mDbHelper.close();
            txtTransDesc.setText("");
            txtAmount.setText("");
            txtDate.setText("");

            // Refresh the list view after record added
            rebuildListView();

這是我的listAdapter類:

private class ListAdapter extends BaseAdapter {
    LayoutInflater inflater;
    ViewHolder viewHolder;

    public ListAdapter(Context context) {
        // TODO Auto-generated constructor stub
        inflater = LayoutInflater.from(context);
    }

    // Bind the data to different textView for each rows
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if (convertView == null) {

            convertView = inflater.inflate(R.layout.trans_listview_row,
                    null);
            viewHolder = new ViewHolder();

            viewHolder.txt_ddate = (TextView) convertView
                    .findViewById(R.id.txtDisplayDate);

            viewHolder.txt_ddesc = (TextView) convertView
                    .findViewById(R.id.txtDisplayDesc);

            viewHolder.txt_dcat = (TextView) convertView
                    .findViewById(R.id.txtDisplayCat);

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

        viewHolder.txt_ddate.setText(_translist.get(position).getDate()
                .trim());

        viewHolder.txt_ddesc.setText(_translist.get(position)
                .getTransDescription().trim());

        viewHolder.txt_dcat.setText(_translist.get(position).getCategory()
                .trim());

        return convertView;
    }
}

但是,我現在的問題是,我先獲得了記錄1,2和3。 然后,當我添加另一個記錄是4時,列表視圖應該只顯示1-4。 但是用我的代碼,我得到的是1,2,3,1,2,3,4 我不知道為什么為什么listAdapter繼續堆疊記錄,盡管我將其設置為null並再次重建它。

提前致謝。

您沒有清除舊列表數據。 您已從列表中刪除了舊記錄。

    public void builtListView() {
    _translist.clear();
    DatabaseAdapter mDbHelper = new DatabaseAdapter(this);
    mDbHelper.createDatabase();
    mDbHelper.open();
    TransactionRecController trc = new TransactionRecController(
            mDbHelper.open());

    ArrayList<TransactionRecModel> trans_list = trc
            .getTransactionRec(session_userID);

    for (int i = 0; i < trans_list.size(); i++) {
        String date = trans_list.get(i).getDate();
        String categoryName = trans_list.get(i).getCategory();
        String transDesc = trans_list.get(i).getTransDescription();

        TransactionRecModel _TransModel = new TransactionRecModel();

        _TransModel.setDate(date);
        _TransModel.setCategory(categoryName);
        _TransModel.setTransDescription(transDesc);

        _translist.add(_TransModel);
    }
    // Set the data into listview
    listview.setAdapter(new ListAdapter(this));

    mDbHelper.close();
}

或者您可以重新分配值

  public void builtListView() {
    _translist.clear();
    DatabaseAdapter mDbHelper = new DatabaseAdapter(this);
    mDbHelper.createDatabase();
    mDbHelper.open();
    TransactionRecController trc = new TransactionRecController(
            mDbHelper.open());

    _translist = trc
            .getTransactionRec(session_userID);

     // Set the data into listview
    listview.setAdapter(new ListAdapter(this));

    mDbHelper.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM