使用基本适配器解决方案从自定义列表中删除行视图
Posted
技术标签:
【中文标题】使用基本适配器解决方案从自定义列表中删除行视图【英文标题】:Delete row view from custom list using base Adapter solution 【发布时间】:2016-01-26 19:45:26 【问题描述】:您好,我无法从列表视图中删除一行我不知道如何删除它我从互联网上搜索了很多我尝试了很多示例但我无法解决问题。当我单击 hldr.delete 按钮时,请从列表解决方案中删除完整的列表视图行。
下单活动
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;
购物车适配器
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
【问题讨论】:
【参考方案1】:您无法从数组中删除任何内容 - 它们始终是固定长度的。一旦您创建了一个长度为 3 的数组,该数组的长度将始终为 3。如果您想从列表视图中删除,您使用的数组应该是动态的(添加和删除)。所以把pIdz; pNamz;pPrizs;userData
变成一些Modal Object,并准备好Modal Objects列表并传递给adapter,让生活更轻松
您最好使用列表,例如一个数组列表:
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();
);
【讨论】:
【参考方案2】:首先。
您应该创建一个对象来存储所有不同的字符串,而不是为每个值使用多个数组。
Ej:
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;
这样您就不必删除每个数组的位置。
最后回答您的问题,只需删除您要为每个数组删除的位置值。
由于它们是 Array 而不是 ArrayList,您需要使用正确的新维度重新创建它(注意,使用 ArrayList 会更容易)。
然后只需在您的 Adapter 类上调用 notifyDataSetChanged()。
希望这会有所帮助。
【讨论】:
以上是关于使用基本适配器解决方案从自定义列表中删除行视图的主要内容,如果未能解决你的问题,请参考以下文章
Android - 从自定义列表视图中删除一个项目并在长按时更新它