我的应用程序中有自定义列表视图。它的所有项目都存储在数据库中。每行都有一个删除按钮。单击删除按钮,我想从数据库和Listview.I中删除相应的行执行代码从数据库中删除,但更改没有反映在我的listview中。我不明白我的datalist(datalist的名字)是什么。
add2cart.java
public class add2cart extends Activity{
ListView adlstvw;
Button btn,remove_btn;
SQLiteDatabase mydb;
public String sme;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.add2crt);
adlstvw=(ListView)findViewById(R.id.lstvw_add2crt);
btn=(Button)findViewById(R.id.place_order);
Bundle extras = getIntent().getExtras();
if (extras != null) {
sme= extras.getString("dtls");
}
mydb=add2cart.this.openOrCreateDatabase("addcart", MODE_PRIVATE, null);
Cursor cr = mydb.rawQuery("SELECT * FROM add2cart", null);
String [] pname = new String[cr.getCount()];
String [] price = new String[cr.getCount()];
int i = 0;
while(cr.moveToNext())
{
String name = cr.getString(cr.getColumnIndex("pnme"));
String prprice = cr.getString(cr.getColumnIndex("prate"));
pname[i] = name;
price[i] = prprice;
i++;
}
CartAdapter cart=new CartAdapter(this,pname,price);
adlstvw.setAdapter(cart);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent in=new Intent(add2cart.this,buy_ltr.class);
Bundle bndl = new Bundle();
bndl.putString("som",sme);
in.putExtras(bndl);
startActivity(in);
}
});
}
}
CartAdapter.java
public class CartAdapter extends BaseAdapter{
public static ListView adlstvw;
private final String[] pname;
private final String[] price;
private Context cntxt;
public CartAdapter(Context c,String [] pname,String [] price)
{
cntxt=c;
this.pname=pname;
this.price=price;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pname.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View List;
LayoutInflater mLayoutInflater=(LayoutInflater)cntxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView==null) {
List=new View(cntxt);
List=mLayoutInflater.inflate(R.layout.add2crt_sub,parent, false);
}
else {
List=(View)convertView;
}
Button button=(Button)List.findViewById(R.id.remove);
button.setTag(position);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int position = (Integer)v.getTag();
SQLiteDatabase mydb=cntxt.openOrCreateDatabase("addcart",Context.MODE_PRIVATE, null);
String pnam = pname[position];
mydb.execSQL("DELETE FROM add2cart WHERE pnme ='"+pnam+"'");
////////////ADDED CODE/////////////////////
Cursor cr = mydb.rawQuery("SELECT * FROM add2cart", null);
String [] pname = new String[cr.getCount()];
String [] price = new String[cr.getCount()];
int i = 0;
while(cr.moveToNext())
{
String name = cr.getString(cr.getColumnIndex("pnme"));
String prprice = cr.getString(cr.getColumnIndex("prate"));
pname[i] = name;
price[i] = prprice;
i++;
}
CartAdapter cart=CartAdapter.this;
add2cart.adlstvw.setAdapter(cart);
notifyDataSetChanged();
////////////////////////////////////////
}
});
TextView nametxt=(TextView)List.findViewById(R.id.prdt_nme);
final TextView pricetxt=(TextView)List.findViewById(R.id.prdt_rate);
final TextView totltxt=(TextView)List.findViewById(R.id.prdt_totl);
final EditText edittext=(EditText)List.findViewById(R.id.prdt_qnty);
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
String s1=pricetxt.getText().toString();
String s2=edittext.getText().toString();
int i1=Integer.parseInt(s1);
int i2=Integer.parseInt(s2);
int res=i1*i2;
totltxt.setText(Integer.toString(res));
if (s2.matches("")) {
edittext.setText("");
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
nametxt.setText(pname[position].toString());
pricetxt.setText(price[position]);
return List;
}
}
}
答案 0 :(得分:1)
直接致电notifyDataSetChanged()
,不使用ClassName.this.notifyDataSetChanged()
,因为您已经在适配器中。
crtlist.remove(position); //removing from your List
notifyDataSetChanged(); //notify your adapter about the change.
答案 1 :(得分:1)
您正在使用Array,并且您正在填充类似于下面的代码。
mydb=add2cart.this.openOrCreateDatabase("addcart", MODE_PRIVATE, null);
Cursor cr = mydb.rawQuery("SELECT * FROM add2cart", null);
String [] pname = new String[cr.getCount()];
String [] price = new String[cr.getCount()];
int i = 0;
while(cr.moveToNext())
{
String name = cr.getString(cr.getColumnIndex("pnme"));
String prprice = cr.getString(cr.getColumnIndex("prate"));
this.pname[i] = name;
this.price[i] = prprice;
i++;
}
从数据库中删除项目后执行的操作相同。之后再次创建适配器并将其设置为listview(您可以通过在活动中将其设置为公共静态来从适配器访问列表视图)。或者在填充数组后尝试notifyDataSetChanged()。
答案 2 :(得分:0)
尝试从适配器中删除视图项,而不是从列表中删除。
listAdapter.remove(viewToRemove); listAdapter.notifyDataSetChanged();