【问题标题】:Delete items in List View populated by SQLite Database using a delete button in each list item in Android使用 Android 中每个列表项中的删除按钮删除由 SQLite 数据库填充的列表视图中的项目
【发布时间】:2014-07-27 19:20:40
【问题描述】:

我花了两天时间尝试使用 Stack Overflow 上的许多答案来解决这个问题,我比以往任何时候都更加困惑如何实现这一目标。

我从我的 SQLite 数据库中的数据填充一个列表。我试图弄清楚如何通过单击包含数据库行字符串的文本视图旁边的同一列表项内的按钮来从数据库中删除一行。

我不知道如何给每个按钮一个绑定到每个列表项的 ID,如果我能做到这一点,我可以从列表项中获取字符串,然后将其传递给查询以删除包含该字符串的行SQLite 数据库。任何见解都值得赞赏。

这是我用于填充列表的代码的简化版本:

public class ShowPhrases extends Activity implements OnInitListener {

ListView lv;
Button trash;
private static final String fields[] = { "phrase", "folang", "engornot",
            BaseColumns._ID };

    NotesDbAdapter.DatabaseHelper helper = new NotesDbAdapter.DatabaseHelper(
            this);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hs);

        data.moveToNext();

        dataSource = new SimpleCursorAdapter(this, R.layout.phrasebook, data,
                fields, new int[] { R.id.first }, 0);

        lv = (ListView) findViewById(R.id.list_view);

        lv.setAdapter(dataSource);

}


}

这是我的布局,包括我的 ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/languageHolder"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:clickable="true"
        android:orientation="horizontal" >

        <LinearLayout
            android:id="@+id/british"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="0.5"
            android:background="@drawable/briton"
            android:clickable="true"
            android:orientation="vertical" >
        </LinearLayout>

         <LinearLayout
            android:id="@+id/italian"
              android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="0.5"
            android:background="@drawable/itaoff"
            android:clickable="true"
            android:orientation="vertical" >
        </LinearLayout>
    </LinearLayout>

    <ListView
        android:id="@+id/list_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:divider="#cccccc"
        android:dividerHeight="4px" />


</LinearLayout>

还有 ListView XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rowLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="horizontal"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" >

    <TextView
        android:id="@+id/first"
        style="@style/factsText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="20dp"
        android:focusable="false" />

    <LinearLayout
        android:layout_width="30dp"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:orientation="vertical" >

        <Button
            android:id="@+id/trashButton"
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:gravity="center_vertical"
            android:text="B" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/spacer"
        android:layout_width="20dp"
        android:layout_height="fill_parent"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/trash"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/favourite"
        android:layout_width="30dp"
        android:layout_height="fill_parent"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/spacer"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:gravity="center_vertical"
            android:src="@drawable/starfav" />
    </LinearLayout>

</RelativeLayout>

【问题讨论】:

    标签: android android-listview android-sqlite


    【解决方案1】:

    在某个阶段,您的适配器会被调用以填充列表中的每个项目。您可以使用每个条目的标签(或只是删除按钮的标签)在数据库中记录相应的ID。

    这里有更多:

    What is the main purpose of setTag() getTag() methods of View?

    【讨论】:

    • 感谢您的回复!查看您提供的链接,我可以理解标签的工作方式,但我不确定如何将其实现到我的 XML 中的按钮。您能否提供进一步的见解!?谢谢!!
    • 我在我的笔记本上,所以我不能写太多。在您的代码中的某处,您将为每个子视图分配属性。所以 text view.settext ("text for item 2") etc. 在那个阶段找到删除按钮并设置标签。
    • Carlos,我不确定分配属性,我所做的只是传递一个 CusrorAdapter 一个从我的数据库填充的字符串数组,我不确定此时如何标记按钮?谢谢!
    • 查看我的一个项目,有一个 bindView(View view, Context context, Cursor cursor) 方法。在其中,您会看到类似“TextView tcDesc = (TextView) view.findViewById(R.id.db_item_title);String desc = cursor.getString(cursor.getColumnIndex(DBHelper.COL_SHORT_DESC));tcDesc.setText(desc); "这是每个单独视图的填充位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多