Android 如何从自定义ListView中删除行条目?
我已经创建了一个自定义列表视图。请告诉我如何从listview中删除条目。我不知道在我的代码中为delete按钮编写代码的位置。请帮帮我。谢谢 下面是ListAdapater.java类: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
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)中删除了条目,在编写上述代码时出现了错误。我可以将表名和列名写在“”(双引号)中吗?在列名中写什么?