0

当我删除所有项目时,我正在尝试刷新我的 ListView。当调用删除函数时,sqlite 表被清除。这部分工作正常。但我无法刷新listView。我尝试了 notifyDataSetChanged() 和 invalidate(),但没有任何效果。

有任何想法吗?

public class ResultsAdapter 
        extends BaseAdapter {

    private LayoutInflater inflater;

    private ResultsTypeOneOpenHelper    resultsTypeOne_db;
    private ResultsTypeTwoOpenHelper    resultsTypeTwo_db;
    private ResultsTypeThreeOpenHelper  resultsTypeThree_db;


    private ArrayList<Object> results;

    static class ViewHolder {
        TextView text;
    }

    public ResultsAdapter(Context context) {
        this.inflater = LayoutInflater.from(context);

        resultsTypeOne_db = new ResultsTypeOneOpenHelper(context);
        resultsTypeTwo_db = new ResultsTypeTwoOpenHelper(context);
        resultsTypeThree_db = new ResultsTypethreeOpenHelper(context);
        results = new ArrayList<Object>();

        /* get results from sqlite */
        if (resultsTypeOne_db.getRowCount() != 0) {
            results.addAll( resultsTypeOne_db.getAllTypeOneResults() );
        }
        if (resultsTypeTwo_db.getRowCount() != 0) {
            results.addAll( resultsTypeTwo_db.getAllTypeTwoResults() );
        }
        if (resultsTypeThree_db.getRowCount() != 0) {
            results.addAll( resultsTypeThree_db.getAllTypeThreeResults() );
        }
    }

    @Override
    public int getCount() {
        return results.size();
    }

    @Override
    public Object getItem(int position) {
        Object item = results.get(position);
        return item;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        ViewHolder viewHolder;

        if (rowView == null) {
            rowView = inflater.inflate(R.layout.results_list_row, null);
            viewHolder = new ViewHolder();
            viewHolder.text = (TextView) rowView.findViewById(R.id.results_list_textView);
            rowView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) rowView.getTag();
        }
        viewHolder.text.setText( results.get(position).toString() );

        return rowView;
    }
}
4

3 回答 3

1

您可以尝试再次调用setListAdapterListActivity当所有项目都被删除时,如果你正在使用而不是,则调用/方法setListAdapter的方法。ListActivitysetAdapterListViewActivityListActivity

于 2013-04-22T13:34:43.390 回答
0

删除数据后,首先清除 ArrayList,然后再次获取新数据并将其存储在 ArrayList 中,然后使用 ListView 方法 setListAdapter(adapter)

于 2013-04-23T06:34:25.530 回答
0

在你的情况下。ResultsAdapter 在类中创建方法,例如:

public void refreshadapter(Context context){

resultsTypeOne_db = new ResultsTypeOneOpenHelper(context);
        resultsTypeTwo_db = new ResultsTypeTwoOpenHelper(context);
        resultsTypeThree_db = new ResultsTypethreeOpenHelper(context);
        results.clear();

        /* get results from sqlite */
        if (resultsTypeOne_db.getRowCount() != 0) {
            results.addAll( resultsTypeOne_db.getAllTypeOneResults() );
        }
        if (resultsTypeTwo_db.getRowCount() != 0) {
            results.addAll( resultsTypeTwo_db.getAllTypeTwoResults() );
        }
        if (resultsTypeThree_db.getRowCount() != 0) {
            results.addAll( resultsTypeThree_db.getAllTypeThreeResults() );
        }
} 

从您的活动中调用此方法

你需要调用这个方法的对象,当你这样做时你已经有了setAdapter()

所以,打电话使用..

reslutAdapter.refreshadapter(myActivity.this);
reslutAdapter.notifyDataSetChanged();
于 2013-04-23T06:43:09.600 回答