Java 如何使用在ListView项中创建的按钮删除该项。

Java 如何使用在ListView项中创建的按钮删除该项。,java,android,listview,Java,Android,Listview,我有一个类,它有一个列表视图。ListView使用pattern.xml文件填充,该文件中有一个按钮。调用该类时,将为listview中的每个项复制该按钮。现在我想要的是访问这些按钮,从列表中删除相应的项。那我该怎么做呢?请帮我解决这个问题。该类的代码如下所示 public class Secondscreen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onC

我有一个类,它有一个列表视图。ListView使用pattern.xml文件填充,该文件中有一个按钮。调用该类时,将为listview中的每个项复制该按钮。现在我想要的是访问这些按钮,从列表中删除相应的项。那我该怎么做呢?请帮我解决这个问题。该类的代码如下所示

public class Secondscreen extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.secondscreen); 
    ListView lv= (ListView) findViewById(R.id.listView1);


    final Button thirdBtn = (Button) findViewById(R.id.third);


    final Controller aController = (Controller) getApplicationContext();

        final int cartSize = aController.getCart().getCartSize();

        final ArrayList<Listitem> arrayList=new ArrayList<Listitem>();


         BaseAdapter adapter= new BaseAdapter(){

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return arrayList.size();
            }

            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return arrayList.get(position);
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
            }

            LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            @Override
            public View getView(final int position, View view, ViewGroup viewgroup) {
                if (view == null) {
                    view=inflater.inflate(R.layout.pattern, null);
                }
                TextView tv=(TextView) view.findViewById(R.id.nameview);
                TextView tv2=(TextView) view.findViewById(R.id.pdesc);
                TextView tv3=(TextView) view.findViewById(R.id.priceView);



                tv.setText(arrayList.get(position).getName());
                tv2.setText(""+arrayList.get(position).getPrice());
                tv3.setText(arrayList.get(position).getDesc());
                return view;
            }       

        };
        adapter.notifyDataSetChanged();
        lv.setAdapter(adapter);


        if(cartSize >0)
            {   

                for(int i=0;i<cartSize;i++)
                {

                   String pName   = aController.getCart().getProducts(i).getProductName();
                   int pPrice      = aController.getCart().getProducts(i).getProductPrice();
                   String pDisc       = aController.getCart().getProducts(i).getProductDesc();

                    Listitem item=new Listitem(pName, pPrice, pDisc);
                    arrayList.add(item);
                    adapter.notifyDataSetChanged();

                }

            }
    }
}
public class Secondscreen扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.secondscreen);
ListView lv=(ListView)findViewById(R.id.listView1);
最终按钮thirdBtn=(按钮)findViewById(R.id.third);
最终控制器A控制器=(控制器)getApplicationContext();
final int cartSize=aController.getCart().getCartSize();
最终ArrayList ArrayList=新ArrayList();
BaseAdapter=新的BaseAdapter(){
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回arrayList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回arrayList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
@凌驾
公共视图getView(最终整数位置、视图视图、视图组视图组){
如果(视图==null){
视图=充气机充气(R.layout.pattern,空);
}
TextView tv=(TextView)view.findViewById(R.id.nameview);
TextView tv2=(TextView)view.findViewById(R.id.pdesc);
TextView tv3=(TextView)view.findViewById(R.id.priceView);
tv.setText(arrayList.get(position.getName());
tv2.setText(“+arrayList.get(position.getPrice());
setText(arrayList.get(position.getDesc());
返回视图;
}       
};
adapter.notifyDataSetChanged();
低压设置适配器(适配器);
如果(cartSize>0)
{   

对于(int i=0;i您必须指定
按钮的
OnClickListener
,并从
BaseAdapter的
arrayList
中删除项,然后调用
notifyDataSetChanged();


我知道这一点,但我不知道将这些代码放在哪里。我如何才能访问列表中的任何特定按钮以对其应用单击操作。我已经尝试了上述过程,但在adapter.notifyDataSetChanged();行中出现错误,该行显示“局部变量适配器可能尚未初始化”我不知道怎么做。只需在
BaseAdapter=…
之前添加
final
就行了。实际上,您的代码有点凌乱…但这可以快速修复现有代码。我也这么做了。我上面提到的错误是在将final关键字放在BaseAdapter=…行之前。很抱歉,这太凌乱了ith代码。情不自禁。我想这是可以理解的。
        @Override
        public View getView(final int position, View view, ViewGroup viewgroup) {
            if (view == null) {
                view=inflater.inflate(R.layout.pattern, null);
            }
            Button button = (Button) view.findViewById(R.id.button);
            //button.setTag(position);
            button.setOnClickListener(new View.OnClickListener(){
                public void onClick(View view) {
                    //Integer position = (Integer)view.getTag();
                    arrayList.remove(position);
                    adapter.notifyDataSetChanged();
                }
            });
            // Your other views...
            return view;
        }