Android 使用基本适配器解决方案从自定义列表中删除行视图

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

嗨,我不能从列表视图中删除一行,我不知道如何删除它,我在网上搜索了很多,我尝试了很多例子,但我无法解决这个问题。当我点击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;
        }

}
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;
    }
}