Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView中的意外行为_Android_Performance_Android Studio - Fatal编程技术网

Android ListView中的意外行为

Android ListView中的意外行为,android,performance,android-studio,Android,Performance,Android Studio,我是Android编程新手。我打算使用ListView制作一个购物清单,这样用户就可以浏览清单上他所购买的物品。应该是这样的 名单已经列出来了 他能把买来的东西一览无余 他可以使用编辑文本和布局底部的添加按钮添加项目 列表是在添加项目后呈现的,如第3点上的项目,并保持笔划通过项目 在开始时,我单击我在程序中添加的许多初始项,然后开始添加项,列表中出现意外行为。一些新添加的项目在我从一开始就单击ADD(添加),而我甚至没有单击它们以使它们通过一个笔划后,就通过了一个笔划。他们中的一些人没有。我不理

我是Android编程新手。我打算使用ListView制作一个购物清单,这样用户就可以浏览清单上他所购买的物品。应该是这样的

  • 名单已经列出来了

  • 他能把买来的东西一览无余

  • 他可以使用编辑文本和布局底部的添加按钮添加项目

  • 列表是在添加项目后呈现的,如第3点上的项目,并保持笔划通过项目

  • 在开始时,我单击我在程序中添加的许多初始项,然后开始添加项,列表中出现意外行为。一些新添加的项目在我从一开始就单击ADD(添加),而我甚至没有单击它们以使它们通过一个笔划后,就通过了一个笔划。他们中的一些人没有。我不理解这种行为。是不是因为ListView的某些属性

     ArrayList<String> shoppingList = new ArrayList<>();;
        ArrayList<String> strikeThroughList = null;
        ArrayList<String> strikeThroughText = null;
        ArrayAdapter<String> adapter = null;
        ListView lv = null;
        Button addBtn=null;
        EditText addEdtTxt=null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            addBtn=findViewById(R.id.addBtn);
            addBtn.setOnClickListener(this::btnClick);
    
    
            //shoppingList = new ArrayList<>();
            strikeThroughList = new ArrayList<>();
            strikeThroughText= new ArrayList<>();
    
    
            //One way to populate List
            Collections.addAll(shoppingList, "Eggs", "Yogurt", "Milk", "Bananas", "Apples", "Tide with bleach", "Cascade");
            adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, shoppingList);
            lv = (ListView) findViewById(R.id.listView);
            lv.setAdapter(adapter);
            lv.setOnItemClickListener(this);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    
             getMenuInflater().inflate(R.menu.mnu,menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            int id=item.getItemId();
    
            if(id==R.id.clrList)
                     {
    
                        shoppingList.clear();
                        lv.setAdapter(adapter);
    
                        }
    
    
            return super.onOptionsItemSelected(item);
        }
    
        public void btnClick(View view) {
    
    
                          if(view.getId()==R.id.addBtn){ addEdtTxt=findViewById(R.id.addEdtTxt);
    
                                adapter.add(addEdtTxt.getText().toString());
                                  adapter.notifyDataSetChanged();
    
                           }
    
                           }
    
        @Override
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
    
            TextView text = (TextView) view;
            text.setPaintFlags(text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    
    
            }
    
    ArrayList shoppingList=new ArrayList();;
    ArrayList删除线列表=null;
    ArrayList StrikethrawText=null;
    ArrayAdapter适配器=空;
    ListView lv=null;
    按钮addBtn=null;
    EditText addEdtTxt=null;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    addBtn=findviewbyd(R.id.addBtn);
    addBtn.setOnClickListener(this::btnClick);
    //shoppingList=newarraylist();
    删除线列表=新的ArrayList();
    删除线文本=新的ArrayList();
    //填充列表的一种方法
    收藏。addAll(购物清单,“鸡蛋”、“酸奶”、“牛奶”、“香蕉”、“苹果”、“漂白粉潮水”、“级联”);
    adapter=new ArrayAdapter(这个,android.R.layout.simple\u list\u item\u 1,shoppingList);
    lv=(ListView)findViewById(R.id.ListView);
    低压设置适配器(适配器);
    lv.setOnItemClickListener(本);
    }
    @凌驾
    公共布尔onCreateOptions菜单(菜单){
    getMenuInflater().充气(R.menu.mnu,menu);
    返回super.onCreateOptions菜单(菜单);
    }
    @凌驾
    公共布尔值onOptionsItemSelected(菜单项项){
    int id=item.getItemId();
    if(id==R.id.clrList)
    {
    shoppingList.clear();
    低压设置适配器(适配器);
    }
    返回super.onOptionsItemSelected(项目);
    }
    公共无效BTN单击(视图){
    if(view.getId()==R.id.addBtn){addEdtTxt=findViewById(R.id.addEdtTxt);
    add(addedTXT.getText().toString());
    adapter.notifyDataSetChanged();
    }
    }
    @凌驾
    公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
    TextView text=(TextView)视图;
    text.setPaintFlags(text.getPaintFlags()| Paint.STRIKE_-THRU_-text_-FLAG);
    }
    
    在将视图添加到删除线视图列表时,尝试更改以下代码

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
    //String selectedFromList = (String)(lv.getItemAtPosition(position));
    TextView text = (TextView) view;
    text.setPaintFlags(text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    text.setId(2);
    strikeThroughView.add(text);
    }
    
    @覆盖
    公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
    //字符串selectedFromList=(字符串)(lv.getItemAtPosition(位置));
    TextView text=(TextView)视图;
    text.setPaintFlags(text.getPaintFlags()| Paint.STRIKE_-THRU_-text_-FLAG);
    setId(2);
    删除线粗糙视图。添加(文本);
    }
    
    这是什么原因导致的
    lv.getChildAt(3)
    ?你为什么用这个?您需要的是一个。我想在ListView中获取子视图,并与strokeThroughViews中已遍历并保存的视图进行比较。如果观点一致,那么我再敲一遍。我这样做是因为我发现,每次我在添加一个项目后单击ADD,然后调用方法btnClick(View View),初始笔划就会消失。如果您知道
    AdapterView
    的工作原理,则不应在
    AdapterView
    中使用
    getChildAt
    。但是当您将新视图添加到删除视图时,您没有添加新视图及其对其他视图的引用。以及如何检查视图id,因为您已将id设置为“添加视图”。所以id必须分配给它自己。谢谢ADM和Chetan。我认为下面给出的Chetans代码是一个合适的解决方案,因为它将笔划粘贴到视图上,并为其提供了一个id,以便稍后在代码和Chetan中进行比较。如何在运行时动态生成id?您可以生成一些随机数。你好,Chetan,我编辑了我的问题。请你看一下好吗