0

Я нашел много ответов не относящимися к делу, а не вопросом, связанным с моим. У меня проблема с флажком в списке, который случайным образом изменяется при выборе во время прокрутки списка.CheckBox в ListVIew Использование SimpleCursorAdapter выбирается случайным образом при прокрутке

Это мой код:

  protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        try { 
         DBMacros.getEntityList(this); 
        } catch (Exception e) { 
        } 
        m_cList = (ListView) findViewById(R.id.LIST_MAIN); 
        m_cCheckB = (CheckBox) findViewById(R.id.check_box); 
        m_cList.setSmoothScrollbarEnabled(true); 

        m_cObjNTable = new NamesTable(); 
        m_cObjNTable.delete(this); 
        ArrayList<HashMap<String, String>> alist = new ArrayList<HashMap<String, String>>(); 
        //Just once run. no debugging later 
        for (int i = 0; i < 30; i++) { 
         HashMap<String, String> hmap = new HashMap<String, String>(); 
         m_cObjNTable = new NamesTable(); 
         m_cObjNTable.setNames("name_" + i); 
         m_cObjNTable.save(this); 
         hmap.put("name_", "name_" + i); 
         alist.add(hmap); 
        } 

        m_cObjCursor = NamesTable.read(this); 
        m_cObjAdapter = new SimpleCursorAdapter(this, R.layout.cell, m_cObjCursor, new String[]{"Names", "Names"}, new       int[]{ R.id.textview, R.id.check_box}); 
        m_cAdapter = new CustomHourAdapter(this, R.layout.cell, alist); 
        m_cCheckBoxState = new boolean[alist.size()]; 
        m_cObjAdapter.setViewBinder(this); 
        m_cList.setAdapter(m_cObjAdapter); 
      //  m_cList.setAdapter(m_cAdapter); 

       } 

       @SuppressWarnings("unchecked") 
       @Override 
       public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 

        boolean lRetVal = false; 
        String lVal = cursor.getString(columnIndex); 
        int lColIndex = cursor.getColumnIndex("Names"); 
        if(lColIndex == columnIndex){ 
      //   Toast.makeText(this, "columnIndex = "+lVal+"" ,Toast.LENGTH_SHORT).show(); 
        } 
        if(view.getId() == R.id.check_box) { 
         ((CheckBox)view).setVisibility(View.VISIBLE); 
         lRetVal = false; 
        }else if (view.getId() == R.id.textview) { 
      //   ((TextView)view).setText(lVal); 
         lRetVal = true; 
         Toast.makeText(this, "columnIndex = "+lVal+"" ,Toast.LENGTH_SHORT).show(); 
        } 

        //Crashing as NullPointerException 
        try { 
         final int lposition1 = m_cList.getPositionForView((View) view.getParent()); 

         Holder holder = null; 
         holder = new Holder(); 


         holder.checkbox = (CheckBox) view.findViewById(R.id.check_box); 
         view.setTag(holder); 
        holder = (Holder) view.getTag(); 

        holder.checkbox.setChecked(m_cCheckBoxState[lposition1]); 
        holder.checkbox.setOnClickListener(new View.OnClickListener() { 

         public void onClick(View v) { 
         if (((CheckBox) v).isChecked()) 
          m_cCheckBoxState[lposition1] = true; 
         else 
          m_cCheckBoxState[lposition1] = false; 

         } 
        }); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

        return lRetVal; 
       } 

Основная проблема заключается в том, что я не буду получать позицию перекрывая setViewValue, поэтому я использую getPositionForView, который дает мне nullPointer. Есть ли другой способ, с помощью которого эта проблема может быть решена только через SimpleCursorAdapter.

Заранее спасибо

ответ

0

Эта проблема спутал меня в течение длительного времени, в конце концов я установил ее! После того, как установлен флажок, вам необходимо установить исходный список данных и изменить значение, чтобы записать статус флажка, а затем уведомить listview, чтобы перезагрузить данные. Затем он работает!

0

Как и многие из нас, я тоже столкнулся с этой общей проблемой «Просмотр списка прокрутки». В моем случае у меня не было флажков вместо некоторых других компонентов, которые также вызывали проблему прокрутки.

Вы можете найти необходимую информацию здесь Link to stack overflow post

После многих R & D Я понимал ListView механизм для прокрутки и пытался объяснить в своем блоге, что может быть полезным. Link to Blog Post.

+0

Спасибо, что ответили. Но я ясно объяснил в вопросе, что его невозможно получить позицию представления, потому что не может переопределить getView() с помощью SimpleCoursorAdapter, пожалуйста, предложите мне любой другой ресурс. –