Android 使用基本适配器解决方案从自定义列表中删除行视图
嗨,我不能从列表视图中删除一行,我不知道如何删除它,我在网上搜索了很多,我尝试了很多例子,但我无法解决这个问题。当我点击hldr.delete按钮时,列表视图的完整行将从列表解决方案中删除 下订单活动Android 使用基本适配器解决方案从自定义列表中删除行视图,android,android-activity,android-listview,Android,Android Activity,Android Listview,嗨,我不能从列表视图中删除一行,我不知道如何删除它,我在网上搜索了很多,我尝试了很多例子,但我无法解决这个问题。当我点击hldr.delete按钮时,列表视图的完整行将从列表解决方案中删除 下订单活动 public class PlaceOrder extends Activity { String [] pIds; String [] pNames; String [] pPrizes; static ListView lv; ImageView
public class PlaceOrder extends Activity {
String [] pIds;
String [] pNames;
String [] pPrizes;
static ListView lv;
ImageView bck;
String [] listImages;
String food_id;
String userdata[];
Intent i;
TextView totalprze;
float tprize;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_order);
lv=(ListView)findViewById(R.id.cart_list);
bck=(ImageView) findViewById(R.id.placeholder_bg_btn);
totalprze =(TextView) findViewById(R.id.place_order_price);
i=new Intent(this,Menu.class);
bck.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bundle bundle=new Bundle();
//bundle.putStringArray("images", ListImages);
bundle.putString("food_id", food_id);
bundle.putStringArray("images", listImages);
bundle.putStringArray("userData",userdata);
i.putExtras(bundle);
startActivity(i);
}
});
if(this.getIntent().getExtras()!=null)
{
Bundle b=this.getIntent().getExtras();
pIds=b.getStringArray("pId");
pNames=b.getStringArray("PName");
pPrizes=b.getStringArray("pPrize");
userdata=b.getStringArray("userData");
tprize=b.getFloat("totalprize");
food_id=b.getString("food_id");
listImages=b.getStringArray("images");
String prz=Float.toString(tprize);
totalprze.setText("$"+prz);
lv.setAdapter(new cartAdapter(PlaceOrder.this, pIds, pNames, pPrizes,userdata));
pIds=null;
pNames=null;
pPrizes=null;
}
}
public void onBackPressed() {
pIds=null;
pNames=null;
pPrizes=null;
}
}
CartAdapter
public class cartAdapter extends BaseAdapter{
String [] pIdz;
String [] pNamz;
String [] pPrizs;
String [] userData;
// List<String> imges;
Context context;
// private ShopingCartHelper obj;
private static LayoutInflater inflater=null;
JSONArray jCat = null;
int count=0;
ProgressDialog pDialog;
public cartAdapter(PlaceOrder ctx,
String[] pIds,String[] pNams, String[] pprise,String [] userdata) {
pIdz=pIds;
pNamz=pNams;
context=ctx;
pPrizs=pprise;
userData=userdata;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(pIdz==null){
Toast.makeText(context, "There is issue with net connection.", Toast.LENGTH_LONG).show();
//Intent i=new Intent(context,WelcomeActivity.class);
//context.startActivity(i);
return count ;
}else{
return pIdz.length;
}
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class holder{
TextView pid;
TextView pname;
TextView pprise;
Button delete;
ListView lv;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final holder hldr=new holder();
View rowView = null;
Bitmap bitmap = null;
rowView = inflater.inflate(R.layout.place_order_item_list, null);
hldr.pid=(TextView) rowView.findViewById(R.id.item_id);
hldr.pname=(TextView) rowView.findViewById(R.id.item_name);
hldr.pprise=(TextView) rowView.findViewById(R.id.item_price);
hldr.delete=(Button) rowView.findViewById(R.id.delete);
hldr.pid.setText(pIdz[position]);
hldr.pname.setText(pNamz[position]);
hldr.pprise.setText(pPrizs[position]);
/* convertView.setTag(hldr);
hldr.delete.setTag(hldr);*/
//
// Picasso.with(context).load(imgs[position]).into(hldr.img);
hldr.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// rowView.remove(position); //removing from your List
//Toast.makeText(context, "Delete",Toast.LENGTH_LONG).show();
int pid=Integer.parseInt(hldr.pid.getText().toString());
//Toast.makeText(context, "pid"+pid, Toast.LENGTH_LONG).show();
new ShopingCartHelper(context).delProduct(pid);
//PlaceOrder.lv.removeViewAt(position);
notifyDataSetChanged();
}
});
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// // TODO Auto-generated method stub
// cartAdapter.this.pIdz.remove[position];
// Toast.makeText(context, "hi",Toast.LENGTH_LONG).show();
}
});
return rowView;
// TODO Auto-generated method stub
}
}
公共类cartAdapter扩展了BaseAdapter{
字符串[]pIdz;
字符串[]pNamz;
字符串[]ppriz;
字符串[]用户数据;
//列出清单;
语境;
//私人购物中心;
专用静态充气机=空;
JSONArray jCat=null;
整数计数=0;
ProgressDialog;
公共cartAdapter(PlaceOrder ctx,
字符串[]PID、字符串[]pNams、字符串[]pprise、字符串[]userdata){
pIdz=pIds;
pNamz=pNams;
上下文=ctx;
pPrizs=pprise;
userData=userData;
充气器=(充气器)上下文。
getSystemService(上下文布局\充气机\服务);
//TODO自动生成的构造函数存根
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
if(pIdz==null){
Toast.makeText(上下文,“网络连接有问题”,Toast.LENGTH_LONG.show();
//意向i=新意向(上下文、WelcomeActivity.class);
//背景。起始触觉(i);
返回计数;
}否则{
返回pIdz.length;
}
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
公共类持有者{
文本视图pid;
文本视图pname;
文本视图pprise;
按钮删除;
ListView lv;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终支架hldr=新支架();
视图行视图=空;
位图=空;
rowView=充气机。充气(R.layout.place\u order\u item\u list,空);
hldr.pid=(TextView)rowView.findViewById(R.id.item_id);
hldr.pname=(TextView)rowView.findViewById(R.id.item_name);
hldr.pprise=(TextView)rowView.findViewById(R.id.item_price);
hldr.delete=(按钮)rowView.findviewbyd(R.id.delete);
hldr.pid.setText(pIdz[位置]);
hldr.pname.setText(pNamz[位置]);
hldr.pprise.SETEXT(pPrizs[位置]);
/*setTag(hldr);
hldr.delete.setTag(hldr)*/
//
//毕加索.with(context).load(imgs[position])到(hldr.img);
hldr.delete.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//rowView.remove(position);//从列表中删除
//Toast.makeText(上下文,“删除”,Toast.LENGTH_LONG.show();
intpid=Integer.parseInt(hldr.pid.getText().toString());
//Toast.makeText(上下文,“pid”+pid,Toast.LENGTH_LONG.show();
新ShopingCartHelper(上下文).delProduct(pid);
//PlaceOrder.lv.removeViewAt(位置);
notifyDataSetChanged();
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
////TODO自动生成的方法存根
//cartAdapter.this.pIdz.remove[position];
//Toast.makeText(上下文“hi”,Toast.LENGTH_LONG).show();
}
});
返回行视图;
//TODO自动生成的方法存根
}
}
您无法从数组中删除任何内容-它们始终是固定长度的。创建长度为3的数组后,该数组的长度将始终为3。如果要从listview中删除,则使用的数组应该是动态的(添加和删除)。所以做pIdz;pNamz;PPRIZ;用户数据
转换为一些模态对象,并准备模态对象列表并将其传递给适配器,从而使生活更轻松
您最好使用列表,例如ArrayList:
hldr.delete.setTag(position);
hldr.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int position = (int)v.getTag();
list.remove(position);
notifyDataSetChanged();
}
});
首先
您应该创建一个存储所有不同字符串的对象,而不是为每个值使用多个数组
Ej:
这样就不必删除每个数组的位置
最后要回答您的问题,只需删除每个数组要删除的位置值
因为它们是数组而不是ArrayList,所以您需要使用正确的新维度重新创建它(注意,使用ArrayList会容易得多)
然后只需在适配器类上调用notifyDataSetChanged()
希望这有帮助
class MyClass
{
String id;
String name
String price;
public MyClass(String id, String name, String price)
{
this.id = id;
this.name = name;
this.price = price;
}
}