Java 如何使用“删除”按钮删除listView中的项目?

Java 如何使用“删除”按钮删除listView中的项目?,java,android,listview,button,Java,Android,Listview,Button,我是JAVA和android的初学者。我已经设法在每个列表视图项上添加了一个setOnItemClickListener,如果您单击一个项(文本),它将从sqlite数据库中删除该项。稍后我会将此更改为转到一个新活动,因此我希望在项目文本旁边的每一行上单击我的按钮deleteFavorite,如果单击该按钮,它将从sqlite数据库中删除该行 如何使用“删除”按钮(deleteFavorite)删除listView中的项目 我最喜欢的.java import android.content.In

我是JAVA和android的初学者。我已经设法在每个
列表视图
项上添加了一个
setOnItemClickListener
,如果您单击一个项(文本),它将从sqlite数据库中删除该项。稍后我会将此更改为转到一个新活动,因此我希望在项目文本旁边的每一行上单击我的按钮
deleteFavorite
,如果单击该按钮,它将从sqlite数据库中删除该行

如何使用“删除”按钮(
deleteFavorite
)删除listView中的项目

我最喜欢的.java

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class Favorite extends ActionBarActivity implements OnItemClickListener {

TextView favoriteTitle;

ListView list;
MySQLiteHelper db;
ArrayAdapter<DBLite> mArrayAdapter;
DBLite item;

Button deleteFavorite;

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

    db = new MySQLiteHelper(this);

    item = db.getAllXXX().get(position);

    db.deleteXXX(item);

    mArrayAdapter = new ArrayAdapter<DBLite>(this,
            R.layout.list_view, R.id.txt, db.getAllXXX());
    list.setAdapter(mArrayAdapter);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favorite);

    favoriteTitle = (TextView) findViewById(R.id.favorite_title);

    db = new MySQLiteHelper(this);

    list = (ListView) findViewById(R.id.favorite_list);

    mArrayAdapter = new ArrayAdapter<DBLite>(this,
            R.layout.list_view, R.id.txt, db.getAllXXX());
    list.setAdapter(mArrayAdapter);
    list.setOnItemClickListener(this);

}
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
公共类Favorite扩展了ActionBarActivity实现了McClickListener{
文本视图收藏夹标题;
列表视图列表;
MySQLiteHelper数据库;
ArrayAdapter mArrayAdapter;
DBLite项目;
按钮删除收藏夹;
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
db=新的MySQLiteHelper(此);
item=db.getAllXXX().get(位置);
db.deleteXXX(项目);
MarrayaAdapter=新阵列适配器(此,
R.layout.list_视图,R.id.txt,db.getAllXXX();
列表.setAdapter(MarrayaAdapter);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.favorite);
favoriteTitle=(TextView)findViewById(R.id.favorite_title);
db=新的MySQLiteHelper(此);
列表=(ListView)findViewById(R.id.favorite_列表);
MarrayaAdapter=新阵列适配器(此,
R.layout.list_视图,R.id.txt,db.getAllXXX();
列表.setAdapter(MarrayaAdapter);
list.setOnItemClickListener(此);
}
我最喜欢的.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/xxx"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" 
android:orientation="vertical"
tools:context="com.xxx.xxx.Favorite">

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/text_background"
    android:padding="10sp"
    android:orientation="vertical">

    <ListView android:id="@+id/favorite_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#666666"
        android:dividerHeight="1sp"
        android:layout_below="@+id/favorite_title" />

   <TextView
        android:id="@+id/favorite_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/favorite_title"
        android:textColor="#FFFFFF"
        android:textSize="20sp"
        android:layout_marginBottom="10sp" />

</RelativeLayout>

</RelativeLayout>

My list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10sp"
android:paddingBottom="10sp"
android:descendantFocusability="blocksDescendants"
android:gravity="center_vertical"
android:orientation="vertical" >

<Button
    android:id="@+id/delete_favorite_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@string/xxx"
    android:focusable="false"
    android:focusableInTouchMode="false"

    android:paddingTop="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp" />

<TextView
    android:id="@+id/txt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:textColor="#FFFFFF" />
</LinearLayout>

似乎您正在将click listener设置为非按钮项。。。 您必须为列表适配器中的按钮设置click listener

请参考这些链接


实现此删除功能将对您大有帮助

问题到底是什么?您会说,“如果您单击一个项目,它将从sqlite数据库中删除该项目”。然后您会说,“但是我希望我的按钮删除每一行上的收藏夹,如果您单击该按钮,它将从sqlite数据库中删除该行”。那么它会删除还是不会删除?如果你现在点击该项目(文本),它会删除该项目,但我不想这样做。我希望按钮可以这样做。如果我不够清楚,很抱歉,现在有点累。没问题。只需要一些澄清。哦,你有
android:focusable=“false”
在按钮上。如果删除该按钮会怎么样?我没有意识到按钮在每一行中。另外,您需要使用自定义适配器,然后在
getView()
中为按钮设置
onClickListener
在每一行上都会有一个按钮。所有行都有相同的按钮。我想如果它现在可以与项目(文本)一起工作的话点击,我可以使用类似于按钮的东西。你认为这样行吗?还是我必须尝试完全不同的东西?我的问题变成了“不清楚你问什么…”,这很奇怪,因为山姆理解。他是超级英雄吗?谢谢山姆的回答!