【问题标题】:Refreshing a listview on click of a button in a row of that listview单击该列表视图行中的按钮刷新列表视图
【发布时间】:2010-08-17 18:22:27
【问题描述】:

我创建了一个 ListView,其中包含一行,而该行又包含文本和一个按钮。 这个想法是让按钮功能作为删除按钮来删除行 来自列表和数据库。

为了做到这一点,我创建了一个适配器来处理按钮单击。此代码如下。 删除数据库记录工作正常,但我还没有成功刷新 ListView 这样记录就不会再显示了。

公共类 FeedArrayAdapter 扩展 ArrayAdapter {

private ARssEReaderDBAdapter dba;
private String TAG = "FeedArrayAdapter";
private View v;
private ListView feedList;

private OnClickListener btnDeleteFeedListener = new OnClickListener(){

    public void onClick(View pView) {
        dba = new ARssEReaderDBAdapter(getContext());

        Integer objInt = (Integer) pView.getTag();
        dba.open();
        dba.deleteFeed(objInt);
        dba.close();

        Log.w(TAG, "Database row, " + pView.getTag() + " got clicked.");
    }
};

public FeedArrayAdapter(Context context, int textViewResourceId, List<Feed> items) {
    super(context, textViewResourceId, items);
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
    Log.w(TAG, "getView");
    v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.feedlistrow, null);
    }
    Feed feed = getItem(position);
    if (feed != null){
        v.setTag(feed.getFeedId());
        TextView title = (TextView)v.findViewById(R.id.TextView01);
        if (title != null){
            title.setText(feed.getTitle());
        }
        Button btnDelete = (Button)v.findViewById(R.id.btnDelete);
        btnDelete.setTag(feed.getFeedId());
        btnDelete.setOnClickListener(btnDeleteFeedListener); //
    }
    return v;
}

}

非常感谢任何帮助。

理查德

【问题讨论】:

    标签: android listview button refresh onclick


    【解决方案1】:

    也许您正在寻找notifyDataSetChanged()。确保从 UI 线程调用它。

    public void notifyDataSetChanged ()
    
    Since: API Level 1
    Notifies the attached View that the underlying data has been changed and it should refresh itself.
    

    【讨论】:

    • 数组适配器有一个方法 setNotifyOnChange,默认设置为 true。调用 notifyDataSetChanged 只有在手动设置为 false 时才会生效。不用说我还没有得到这个工作。我似乎无法从点击处理程序中调用它。从其他地方调用它没有任何效果。
    • 没错,setNotifyOnChange() 不需要直接调用这个方法。我在您发布的代码 sn-p 中没有看到。
    • 我在列表活动中初始化后立即在适配器上调用它,但默认设置为 true,因此我将其删除,因为它似乎没有任何效果。
    猜你喜欢
    • 2021-11-04
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多