【问题标题】:Delete item in listview using the delete button outside list view in Android使用Android中列表视图外的删除按钮删除列表视图中的项目
【发布时间】:2014-03-09 09:36:11
【问题描述】:

我正在使用具有check boxbutton 的自定义列表视图,并使用光标适配器填充列表视图。

现在我想在单击按钮Delete 时删除列表视图的项目。因此,我首先使用了按钮单击侦听器,然后在列表视图中捕获项目单击我为列表视图编写了 itemclicklistener,然后尝试捕获,但这里没有任何工作,因为当在列表视图中单击项目时,控件不会转到 ItemClicklistener .

代码:

public class manager extends Activity{
    
    String getentry;
    private int storeID=0;
    //Database d;
    StockTable st;
    private String getstocks;
    public Cursor a1;
    Intent bd;
    Intent sd;
    //ListView popstocks;
    
    /*public stockmanager() {
        // TODO Auto-generated constructor stub
        
    }*/
    
    static class ViewHolder {
        
        CheckBox cb;
        Button view1; 
    }
    
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stockmanager);
        // d=new Database(getApplicationContext());
        st=new StockTable(getApplicationContext());
        final Button AddStock=(Button) findViewById(R.id.button1);
        final Button DeleteStock=(Button) findViewById(R.id.button3);
        final EditText entry=(EditText) findViewById(R.id.editText1);
        final Button BroDetail=(Button) findViewById(R.id.button2);
        //final ListView popstocks=(ListView) findViewById(R.id.listView1);
        final ListView popstocks =(ListView) findViewById(R.id.listView1);
        final TextView displaystocks=(TextView) findViewById(R.id.textView2);
            
            ********button that is used for deleting the item in listview**************************
        DeleteStock.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                popstocks.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        // TODO Auto-generated method stub
                        //Toast.makeText(getApplicationContext(), popstocks.getCheckedItemCount(), Toast.LENGTH_LONG).show();
                        System.out.println(popstocks.getCheckedItemCount());
                    }
                    
                    
                });
                System.out.println(popstocks.isItemChecked(popstocks.getCheckedItemPosition()));
            }
        });
        
            }
    public class poplist extends CursorAdapter{

        public poplist(Context context, Cursor c) {
            super(context, c);
            // TODO Auto-generated constructor stub
        }
        //StockTable st1=new StockTable(getApplicationContext());
        //Database d1=new Database(getApplicationContext());
        

        @Override
        public void bindView(View view, Context context, Cursor c) {
            // TODO Auto-generated method stub
            final ViewHolder myviewholder=new ViewHolder();
            myviewholder.cb=(CheckBox) view.findViewById(R.id.checkBox1);
            myviewholder.view1=(Button) view.findViewById(R.id.button1); 
            
            //if(c.moveToFirst()){
                
                //cb.setText(a1.getString(a1.getColumnIndex(st1.column2)));
                    //do{
                        //cb.setText(a1.getString(a1.getColumnIndexOrThrow(st.column2)));
            myviewholder.cb.setText(c.getString(c.getColumnIndexOrThrow(st.column3)));
                //  }while (a1.moveToNext());
                
            //  }
            
            myviewholder.view1.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    sd=new Intent(v.getContext(),StockDetail.class);
                    sd.putExtra("StockName", myviewholder.cb.getText());
                    startActivity(sd);
                    
                    
                }
            });
        }

        @Override
        public View newView(Context context, Cursor c, ViewGroup parent) {
            // TODO Auto-generated method stub
            LayoutInflater inflater = LayoutInflater.from(context);

            View v = inflater.inflate(R.layout.stocklist, parent, false);
                    bindView(v, context, c);
                   return v;
//          return null;
        }
        
        
    }

    
}

我该如何解决这个问题?如果我走错了方向,我很高兴得到任何指导。我是 Android 初学者。

编辑

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stockmanager);
        // d=new Database(getApplicationContext());
        st=new StockTable(getApplicationContext());
        final Button AddStock=(Button) findViewById(R.id.button1);
        final Button DeleteStock=(Button) findViewById(R.id.button3);
        final EditText entry=(EditText) findViewById(R.id.editText1);
        final Button BroDetail=(Button) findViewById(R.id.button2);
        //final ListView popstocks=(ListView) findViewById(R.id.listView1);
        final ListView popstocks =(ListView) findViewById(R.id.listView1);
        final TextView displaystocks=(TextView) findViewById(R.id.textView2);
        displaystocks.setText("You have not added any stocks start by entering stock name and clicking ADD Stock button");
        getstocks="Select " + st.column1 + " as _id, " + st.column3 + " From "+ st.tablename;
        a1=Database.getInstance(getApplicationContext()).getWritableDatabase().rawQuery(getstocks, null);
        if(a1.moveToNext())
        {
            displaystocks.setVisibility(View.INVISIBLE);
        }
        poplist populatestocks=new poplist(getApplicationContext(),a1) ;
        popstocks.setAdapter(populatestocks);
        
        popstocks.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                
                System.out.println("Item Clicked");
                System.out.println(popstocks.getCheckedItemPosition());
            }
        });

这里控制在进行,但是在我选择了所有列表视图项之后,itemposition 也返回为-1

【问题讨论】:

  • 从数组列表视图中获取所有元素到文本视图中,然后设置按钮单击事件侧的值 textview.settext("") ;解决我认为......这样做可能会帮助你
  • 谢谢阿米特,但如果我将 listview 的所有值都添加到 textview 中,那么如果我删除 listview 的任何项目,这将如何影响已经填充的 listview?
  • 你列出所有项目(它们在你需要调用的另一个布局的文本视图中)列表......然后你可以清除这些项目值集(“ "); ......

标签: android listview android-cursoradapter


【解决方案1】:

当您在 Adapter 类上拥有按钮并单击侦听器时,问题是如果视图包含可聚焦或可点击的项目,则不会调用 OnItemCLickListener。

android:descendantFocusability="blocksDescendants" 之类的行项目参数设置,我认为您的代码上是 stocklist

更多信息请查看thisthis

// 编辑

在Chat上讨论后明白你想要setClick只是为了你checkBox,所以你需要以下代码:

 @Override
        public void bindView(View view, Context context, Cursor c) {
            // TODO Auto-generated method stub
            final ViewHolder myviewholder=new ViewHolder();
            myviewholder.cb=(CheckBox) view.findViewById(R.id.checkBox1);
            myviewholder.view1=(Button) view.findViewById(R.id.button1); 

            //if(c.moveToFirst()){

                //cb.setText(a1.getString(a1.getColumnIndex(st1.column2)));
                    //do{
                        //cb.setText(a1.getString(a1.getColumnIndexOrThrow(st.column2)));
            myviewholder.cb.setText(c.getString(c.getColumnIndexOrThrow(st.column3)));
                //  }while (a1.moveToNext());

            //  }

           myviewholder.cb.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                   // CheckBox Clicked


                }
            });

            myviewholder.view1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    sd=new Intent(v.getContext(),StockDetail.class);
                    sd.putExtra("StockName", myviewholder.cb.getText());
                    startActivity(sd);


                }
            });
        }

【讨论】:

  • 感谢 Shayan... 应该在 xml 文件中进行更改。正确的?是的,它在 stocklist 中,但在 stocklist 中添加那个
  • 是的@Siva,在父布局上,如线性或相对布局
  • 试过但结果是一样的按钮点击无法捕获checkbox selection
  • onItemClick 打电话了吗?使用日志或调试来找出
  • 我不认为它被称为日志语句,因为单击事件是 npt 打印在日志中的。但我又在调试了
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多