2013-12-18 3 views
0

Привет, я новичок в android и делаю пользовательский listview с флажком, в котором я смотрю случайный выбор другого элемента списка при прокрутке. Я прошел через некоторые темы, но не решил свою проблему. Pls поможет мне в этом. Вот мой пользовательский адаптер import android.app.Activity; import android.app.AlertDialog; import android.content.Context; импорт android.content.DialogInterface; импорт android.content.Intent; import android.os.Bundle; импорт android.util.SparseBooleanArray; импорт android.view.LayoutInflater; импорт android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; импорт android.widget.CompoundButton; импорт android.widget.ListView; импорт android.widget.TextView; import android.widget.Toast;Как исправить флажки авто случайным выбором, прокручивая listview, а также показывает java.lang.IndexOutOfBoundsException: Недопустимый индекс 10, размер 10

  public class ViewRecord extends Activity { 

       DataBaseHelper db; 
       ListView listView; 
       Button delAll, more, setTime; 
       ListAdapter list; 
       CheckBox check; 
       boolean checks = false; 

       ArrayList<Contacts> arrayContacts = new ArrayList<Contacts>(); 

       @Override 
       protected void onCreate(Bundle savedInstanceState) { 
        // TODO Auto-generated method stub 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.records); 
        listView = (ListView) findViewById(R.id.listview); 
        delAll = (Button) findViewById(R.id.delete); 
        more = (Button) findViewById(R.id.addMore); 
        setTime = (Button) findViewById(R.id.btnTime); 
        check = (CheckBox) findViewById(R.id.checkBox1); 

        loadlist(); 

      //  For adding more contacts to BlockList  
        more.setOnClickListener(new View.OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          // TODO Auto-generated method stub 
          Intent intent = new Intent(ViewRecord.this, ContactList.class); 
          startActivity(intent); 

         } 
        }); 

      //  For selecting the whole Records to delete..... 
          check.setOnClickListener(new OnClickListener() { 

           @Override 
           public void onClick(View v) { 
            // TODO Auto-generated method stub 
            list = new ListAdapter(getBaseContext()); 
            checks = !checks; 
            for (int count =0; count<arrayContacts.size(); count++){ 
            listView.setAdapter(list); 
            list.mCheckStates.put(count, checks); 
            list.notifyDataSetChanged(); 
           } 
      //      check.toggle(); 
           } 
          }); 
       } 

       private void loadlist() { 
        // TODO Auto-generated method stub 
         list = new ListAdapter(this); 
         listView.setAdapter(list); 
         //listView.setOnItemClickListener(this); 
         listView.setItemsCanFocus(false); 
         listView.setTextFilterEnabled(true); 


       } 

       @Override 
       protected void onResume() { 
        // TODO Auto-generated method stub 
        super.onResume(); 

        arrayContacts.clear(); 
        // Reading DataBase Contacts. 
        db = new DataBaseHelper(getApplicationContext()); 
        db.getWritableDatabase(); 
        ArrayList<Contacts> arrayStor = db.getContacts(); 

        for (int i = 0; i < arrayStor.size(); i++) { 
         String Id = arrayStor.get(i).getContactId(); 
         String Name = arrayStor.get(i).getContactName(); 
         String Number = arrayStor.get(i).getContactNumber(); 

         Contacts contacts = new Contacts(); 
         contacts.setContactId(Id); 
         contacts.setContactName(Name); 
         contacts.setContactNumber(Number); 

         arrayContacts.add(contacts); 
        } 

      //  listView.setAdapter(new ListAdapter(this)); 
        db.close(); 
       } 

       private class ListAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener { 

        private SparseBooleanArray mCheckStates; 
        LayoutInflater inflater; 
        ViewHolder viewHolder; 
        CheckBox cb; 

        public ListAdapter(Context context) { 
         mCheckStates = new SparseBooleanArray(arrayContacts.size()); 
         inflater = LayoutInflater.from(context); 
        } 

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

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

        @Override 
        public View getView(int position, View convertView, ViewGroup parent) { 
         // TODO Auto-generated method stub 
         if (convertView == null) { 
          convertView = inflater.inflate(R.layout.listview_row, null); 
          cb = (CheckBox) convertView.findViewById(R.id.checkox); 

          cb.setTag(position); 
          cb.setChecked(mCheckStates.get(position, false)); 
          cb.setOnCheckedChangeListener(this); 

          viewHolder = new ViewHolder(); 

          viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtdisplaypname); 

          convertView.setTag(viewHolder); 
         } else { 
          viewHolder = (ViewHolder) convertView.getTag(); 
         } 

         viewHolder.txtName.setText(arrayContacts.get(position).getContactName().trim()); 

         delAll.setOnClickListener(new View.OnClickListener() { 

          @Override 
          public void onClick(View v) { 
           // TODO Auto-generated method stub 
          AlertDialog.Builder alertbox = new AlertDialog.Builder(
           ViewRecord.this); 
         alertbox.setCancelable(true); 
         alertbox.setMessage("Are you sure you want to delete ?"); 
         alertbox.setPositiveButton("Yes", 
           new DialogInterface.OnClickListener() { 

            public void onClick(DialogInterface arg0, 
              int arg1) { 

             if(check.isChecked()==true){ 
              db.emptyRecords(); 
              check.toggle(); 
              ViewRecord.this.onResume(); 
             }else 
             { 
             for(int i = 0; i < arrayContacts.size(); i++){ 
               { 
               if(mCheckStates.get(i)==true) 
               {   
               db.RemoveRecord(arrayContacts.get(i).getContactId().trim(), "", ""); 
               System.out.println("The contact name and id is :" + arrayContacts.get(i).getContactId() + arrayContacts.get(i).getContactName()); 
               ViewRecord.this.onResume(); 
                } 

               } 
               } 

             Toast.makeText(getApplicationContext()," Records Deleted...",Toast.LENGTH_SHORT).show(); 
             db.close(); 
            } 
            } 

           }); 
         alertbox.setNegativeButton("No", 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface arg0, 
              int arg1) { 
            } 
           }); 
         alertbox.show(); 
         db.close(); 
          } 


         }); 

         setTime.setOnClickListener(new View.OnClickListener() { 

          @Override 
          public void onClick(View v) { 
           // TODO Auto-generated method stub 

           ArrayList<String> contactName = new ArrayList<String>(); 
           ArrayList<String> contactNumber = new ArrayList<String>(); 
           for(int i = 0; i < arrayContacts.size(); i++) 
            { 
            if(mCheckStates.get(i)==true) 
            {   

            // For sending contact names to schedule 
            contactName.add(arrayContacts.get(i).getContactName()); 
            contactNumber.add(arrayContacts.get(i).getContactNumber()) ; 
            }   
            }      
            Intent sendIntent = new Intent (getApplicationContext(), Time_Settings.class); 
            sendIntent.putExtra("contactName", contactName); 
            sendIntent.putExtra("contactNumber", contactNumber); 
      //      Toast.makeText(getApplicationContext(), contactName + contactNumber, 0).show(); 
            startActivity(sendIntent); 
          } 
         }); 



         return convertView; 
        } 

        public boolean isChecked(int position) { 

        return mCheckStates.get(position, checks); 

        } 

         public void setChecked(int position, boolean isChecked) { 
          mCheckStates.put(position, isChecked); 
          notifyDataSetChanged(); 

         } 

         public void toggle(int position) { 
          setChecked(position, !isChecked(position)); 

         } 
        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
        mCheckStates.put((Integer) buttonView.getTag(), isChecked);  
        } 

       } 

       private class ViewHolder { 
        TextView txtName; 
       } 
      } 
       } 
+0

Привет, ребята У меня есть проблема в моем ListView, при прокрутке ListView он автоматически выбирает флажки, plz видит мой код, в чем проблема в коде ????? –

+0

Я нашел ответ, удалю брекеты и избегаю повторного использования просмотров ... –

ответ

0

Здесь я сделал вид реиспользование Вот почему он автоматически проверять флажков, просто удалите скобки и еще часть от GetView это решить мою проблему

+0

Не забудьте принять ваш ответ. Когда это возможно. – Rolice

Смежные вопросы