Android 如何从自定义ListView中删除行条目?

Android 如何从自定义ListView中删除行条目?,android,listview,delete-row,Android,Listview,Delete Row,我已经创建了一个自定义列表视图。请告诉我如何从listview中删除条目。我不知道在我的代码中为delete按钮编写代码的位置。请帮帮我。谢谢 下面是ListAdapater.java类: package com.example.login; import java.util.ArrayList; import android.content.Context; import android.view.LayoutInflater; import android.view.View; impo

我已经创建了一个自定义列表视图。请告诉我如何从listview中删除条目。我不知道在我的代码中为delete按钮编写代码的位置。请帮帮我。谢谢

下面是ListAdapater.java类:

package com.example.login;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListAdapater extends ArrayAdapter<String> {
customButtonListener customListner;

public interface customButtonListener {
    public void onButtonClickListner(int position, String value);
}

public void setCustomButtonListner(customButtonListener listener) {
    this.customListner = listener;
}

private Context context;
private ArrayList<String> data = new ArrayList<String>();

public ListAdapater(Context context, ArrayList<String> dataItem) {
    super(context, R.layout.my_custom_list_layout, dataItem);
    this.data = dataItem;
    this.context = context;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.my_custom_list_layout, null);
        viewHolder = new ViewHolder();
        viewHolder.text = (TextView) convertView.findViewById(R.id.TextView);
        viewHolder.button = (Button) convertView.findViewById(R.id.delete);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    final String temp = getItem(position);
    viewHolder.text.setText(temp);
    viewHolder.button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (customListner != null) {
                customListner.onButtonClickListner(position, temp);

            }

        }
    });

    return convertView;
}

public class ViewHolder {
    TextView text;
    Button button;
}
}
package com.example.login;

import com.example.login.ListAdapater.customButtonListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class Hompage extends Activity implements customButtonListener {

ListView listView;
ListAdapater adapter;
ArrayList<String> dataItems = new ArrayList<String>();
SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);
    db = openOrCreateDatabase("login", MODE_PRIVATE, null);
    // My code
    String query1 = "SELECT * FROM USERS;";
    int c = 0;
    try {
        Cursor c1 = db.rawQuery(query1, null);
        if (c1.moveToFirst()) {
            String[] temp2 = new String[c1.getCount()];
            do {
                String tempo = "Name" + ": " + c1.getString(1) + " " + c1.getString(2) + " \n" + "Gender" + ": "
                        + c1.getString(4) + "\n " + "Hobbies" + ": " + c1.getString(8) + " \n" + "User Type" + ": "
                        + c1.getString(9);
                temp2[c] = tempo;
                c++;
                // String[] dataArray = temp2;
                // List<String> datatemp = Arrays.asList(dataArray);
                // dataItems.addAll(datatemp);
            } while (c1.moveToNext());
            String[] dataArray = temp2;
            List<String> datatemp = Arrays.asList(dataArray);
            dataItems.addAll(datatemp);
            listView = (ListView) findViewById(R.id.listView);

            adapter = new ListAdapater(Hompage.this, dataItems);
            adapter.setCustomButtonListner(Hompage.this);
            listView.setAdapter(adapter);
        }
    } catch (Exception e) {

    }

}


@Override
public void onButtonClickListner(int position, String value) {


    //EDITED CODE...

    // TODO Auto-generated method stub
    String query = "SELECT USER_TYPE FROM USERS WHERE userName =  '" + temp + "'";
    Cursor c2 = db.rawQuery(query, null);
    if (c2.moveToFirst()) {

        if (c2.getString(0).equals("Admin")) {
            dataItems.remove(position);
            adapter.notifyDataSetChanged();     
            Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_LONG).show();
            return;
        }
        else{
            Toast.makeText(getApplicationContext(), "Only Admin can delete", Toast.LENGTH_LONG).show();
        }
    }


}

}
package com.example.login;
导入java.util.ArrayList;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ListAdapater扩展了ArrayAdapter{
customButtonListener CustomListener;
公共接口customButtonListener{
公共void onButtonClickListner(int位置,字符串值);
}
public void setCustomButtonListner(customButtonListener侦听器){
this.customListner=侦听器;
}
私人语境;
private ArrayList data=new ArrayList();
公共ListAdapater(上下文,ArrayList数据项){
super(上下文、R.layout.my\u自定义\u列表\u布局、数据项);
this.data=数据项;
this.context=上下文;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutFlater充气机=LayoutFlater.from(上下文);
convertView=充气机.充气(R.layout.my\u custom\u list\u layout,null);
viewHolder=新的viewHolder();
viewHolder.text=(TextView)convertView.findViewById(R.id.TextView);
viewHolder.button=(button)convertView.findViewById(R.id.delete);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
最终字符串温度=getItem(位置);
viewHolder.text.setText(临时);
viewHolder.button.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(customListner!=null){
customListner.onButtonClickListner(位置、温度);
}
}
});
返回视图;
}
公共类视图持有者{
文本查看文本;
按钮;
}
}
Hompage.java类:

package com.example.login;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListAdapater extends ArrayAdapter<String> {
customButtonListener customListner;

public interface customButtonListener {
    public void onButtonClickListner(int position, String value);
}

public void setCustomButtonListner(customButtonListener listener) {
    this.customListner = listener;
}

private Context context;
private ArrayList<String> data = new ArrayList<String>();

public ListAdapater(Context context, ArrayList<String> dataItem) {
    super(context, R.layout.my_custom_list_layout, dataItem);
    this.data = dataItem;
    this.context = context;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.my_custom_list_layout, null);
        viewHolder = new ViewHolder();
        viewHolder.text = (TextView) convertView.findViewById(R.id.TextView);
        viewHolder.button = (Button) convertView.findViewById(R.id.delete);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    final String temp = getItem(position);
    viewHolder.text.setText(temp);
    viewHolder.button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (customListner != null) {
                customListner.onButtonClickListner(position, temp);

            }

        }
    });

    return convertView;
}

public class ViewHolder {
    TextView text;
    Button button;
}
}
package com.example.login;

import com.example.login.ListAdapater.customButtonListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class Hompage extends Activity implements customButtonListener {

ListView listView;
ListAdapater adapter;
ArrayList<String> dataItems = new ArrayList<String>();
SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);
    db = openOrCreateDatabase("login", MODE_PRIVATE, null);
    // My code
    String query1 = "SELECT * FROM USERS;";
    int c = 0;
    try {
        Cursor c1 = db.rawQuery(query1, null);
        if (c1.moveToFirst()) {
            String[] temp2 = new String[c1.getCount()];
            do {
                String tempo = "Name" + ": " + c1.getString(1) + " " + c1.getString(2) + " \n" + "Gender" + ": "
                        + c1.getString(4) + "\n " + "Hobbies" + ": " + c1.getString(8) + " \n" + "User Type" + ": "
                        + c1.getString(9);
                temp2[c] = tempo;
                c++;
                // String[] dataArray = temp2;
                // List<String> datatemp = Arrays.asList(dataArray);
                // dataItems.addAll(datatemp);
            } while (c1.moveToNext());
            String[] dataArray = temp2;
            List<String> datatemp = Arrays.asList(dataArray);
            dataItems.addAll(datatemp);
            listView = (ListView) findViewById(R.id.listView);

            adapter = new ListAdapater(Hompage.this, dataItems);
            adapter.setCustomButtonListner(Hompage.this);
            listView.setAdapter(adapter);
        }
    } catch (Exception e) {

    }

}


@Override
public void onButtonClickListner(int position, String value) {


    //EDITED CODE...

    // TODO Auto-generated method stub
    String query = "SELECT USER_TYPE FROM USERS WHERE userName =  '" + temp + "'";
    Cursor c2 = db.rawQuery(query, null);
    if (c2.moveToFirst()) {

        if (c2.getString(0).equals("Admin")) {
            dataItems.remove(position);
            adapter.notifyDataSetChanged();     
            Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_LONG).show();
            return;
        }
        else{
            Toast.makeText(getApplicationContext(), "Only Admin can delete", Toast.LENGTH_LONG).show();
        }
    }


}

}
package com.example.login;
导入com.example.login.ListAdapater.customButtonListener;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入android.app.Activity;
导入android.database.Cursor;
导入android.database.DataSetObserver;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
公共类Hompage扩展活动实现customButtonListener{
列表视图列表视图;
ListAdapater适配器;
ArrayList dataItems=新的ArrayList();
sqlitedb数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
db=openOrCreateDatabase(“登录”,模式_PRIVATE,空);
//我的代码
String query1=“从用户中选择*”;
int c=0;
试一试{
游标c1=db.rawQuery(query1,null);
if(c1.moveToFirst()){
字符串[]temp2=新字符串[c1.getCount()];
做{
String tempo=“Name”+:“+c1.getString(1)+”“+c1.getString(2)+”\n“+”性别“+”:”
+c1.getString(4)+“\n”+”嗜好“+”:“+c1.getString(8)+”\n“+”用户类型“+”:”
+c1.getString(9);
节奏2[c]=节奏;
C++;
//字符串[]dataArray=temp2;
//List datatemp=Arrays.asList(dataArray);
//dataItems.addAll(datatemp);
}而(c1.moveToNext());
字符串[]dataArray=temp2;
List datatemp=Arrays.asList(dataArray);
dataItems.addAll(datatemp);
listView=(listView)findViewById(R.id.listView);
adapter=newlistadapater(Hompage.this,dataItems);
setCustomButtonListner(Hompage.this);
setAdapter(适配器);
}
}捕获(例外e){
}
}
@凌驾
公共void onButtonClickListner(int位置,字符串值){
//编辑的代码。。。
//TODO自动生成的方法存根
String query=“从userName=”+temp+“”的用户中选择用户类型”;
游标c2=db.rawQuery(查询,空);
if(c2.moveToFirst()){
if(c2.getString(0.equals(“Admin”)){
数据项。删除(位置);
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(),“Deleted”,Toast.LENGTH_LONG.show();
返回;
}
否则{
Toast.makeText(getApplicationContext(),“只有管理员才能删除”,Toast.LENGTH_LONG.show();
}
}
}
}
像这样试试

@Override
public void onButtonClickListner(int position, String value) {
// TODO Auto-generated method stub
   dataItems.remove(position);
   adapter.notifyDataSetChanged();

// call this method
deleteRowFromTable(your_table_name, your_column_name, value)

}

public void deleteRowFromTable(String tableName, String columnName, String keyValue) {
    String whereClause = columnName + "=?";
    String[] whereArgs = new String[]{String.valueOf(keyValue)};
    yourDatabase.delete(tableName, whereClause, whereArgs);
}
像这样试试

@Override
public void onButtonClickListner(int position, String value) {
// TODO Auto-generated method stub
   dataItems.remove(position);
   adapter.notifyDataSetChanged();

// call this method
deleteRowFromTable(your_table_name, your_column_name, value)

}

public void deleteRowFromTable(String tableName, String columnName, String keyValue) {
    String whereClause = columnName + "=?";
    String[] whereArgs = new String[]{String.valueOf(keyValue)};
    yourDatabase.delete(tableName, whereClause, whereArgs);
}

viewHolder.按钮上单击要从ListView中删除行吗?是。。。实际上我不知道在哪里使用这句话:listView.remove(position);在
viewHolder.按钮上单击要从ListView中删除行吗?是。。。实际上我不知道在哪里使用这句话:listView.remove(position);请检查onButtonClickListener中编辑的代码。。我在写删除查询时感到困惑。@Rakesh您还没有执行删除查询。您只是从arraylist(listview)中删除了条目,在编写上述代码时出现了错误。我可以将表名和列名写在“”(双引号)中吗?在列名中写什么?请检查onButtonClickListener中编辑的代码。。我在写删除查询时感到困惑。@Rakesh您还没有执行删除查询。您只是从arraylist(listview)中删除了条目,在编写上述代码时出现了错误。我可以将表名和列名写在“”(双引号)中吗?在列名中写什么?