Ank*_*kit 3 android listview baseadapter
我正在为每行创建一个带有TextView的ListView和1个删除按钮.
要填充列表,我使用自定义适配器(扩展基本适配器)和sqlite db映射到列表.
我的要求是连续删除按钮,记录应该删除,列表应该刷新.
我能够从数据库中删除记录但我的列表不会刷新,直到我旋转设备或从活动分配我的适配器的新实例.
我试过以下答案, 但在我的情况下没有用.这个答案与我的案例之间的区别在于我正在使用baseAdapter并且他正在使用cursorAdapter.
public class BookmarksPDFAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
openDatabase();
btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
deleteBookmark(getLocation(v));//getlocation(View) method returns which delete button clicked
notifyDataSetChanged();
}
});
}
closeDatabase();
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
我的活动看起来像
public class BookmarkActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bookmarks);
btnEdit = (Button) findViewById(R.id.edit_bookmarks);
btnAdd = (Button) findViewById(R.id.add_bookmarks);
list = (ListView) findViewById(android.R.id.list);
adapter = new BookmarksPDFAdapter(this);
list.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
bookmark.xml
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10.0"
android:paddingTop="5dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="3dip"
android:layout_alignParentLeft="true"
android:weightSum="1.0"
android:layout_marginRight="5dip">
<ImageView
android:id="@+id/iconShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/delete_icon"
android:visibility="invisible"
android:layout_weight="1.0"/>
</LinearLayout>
<TextView
android:id="@+id/bookmark_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_weight="7.0"
android:gravity="center_horizontal|center_horizontal"
android:lines="1"
android:text="@+id/TextView01"
android:textSize="24dp" />
<Button
android:id="@+id/btnDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="2.0"
android:text="@string/btn_txt_delete"
android:visibility="invisible" >
</Button>
Run Code Online (Sandbox Code Playgroud)
listitem.xml
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10.0"
android:paddingTop="5dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="3dip"
android:layout_alignParentLeft="true"
android:weightSum="1.0"
android:layout_marginRight="5dip">
<ImageView
android:id="@+id/iconShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/delete_icon"
android:visibility="invisible"
android:layout_weight="1.0"/>
</LinearLayout>
<TextView
android:id="@+id/bookmark_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_weight="7.0"
android:gravity="center_horizontal|center_horizontal"
android:lines="1"
android:text="@+id/TextView01"
android:textSize="24dp" />
<Button
android:id="@+id/btnDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="2.0"
android:text="@string/btn_txt_delete"
android:visibility="invisible" >
</Button>
Run Code Online (Sandbox Code Playgroud)
deleteBookmark方法
void deleteBookmark(int wantedChild) {
String bookmarkItem = getBookmarkItemText(wantedChild, true);
datasource.open();
int check = datasource.deleteBookmark(bookmarkItem);
if (check == 1) {
btnDelete = (Button) (viewList.get(wantedChild)
.findViewById(R.id.btnDelete));
btnDelete.setText(R.string.btn_txt_deleted);
btnDelete.setEnabled(false);
}
datasource.close();
}
Run Code Online (Sandbox Code Playgroud)
这里我从我的数据库中删除记录,并将删除按钮的文本从删除更改为已删除
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
您可以随时调用上述方法刷新列表视图.在您的情况下,从数据库中删除记录后调用它.