2015-05-31 2 views
-1

Я пытаюсь отобразить значения выбранных элементов, потому что я хочу их позже сохранить в ArrayList, чтобы отправить их на сервер. В настоящее время, когда я выбираю элементы и нажимаю кнопку, приложение падает, и я получаю ошибку: Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null object referenceПопытка вызвать виртуальный метод 'boolean android.widget.CheckBox.isChecked()' на ссылке нулевого объекта

Как это исправить?

Я ценю любую помощь.

OnCreate метод в MainActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.route_available); 

    ArrayList<Integer> arr = new ArrayList<Integer>(); 
    arr.add(2); 
    arr.add(4); 
    arr.add(6); 
    createCheckboxList(arr); 

} 

Метод createCheckboxList в MainActivity:

private void createCheckboxList(final ArrayList<Integer> items) { 


     final LinearLayout ll = (LinearLayout) findViewById(R.id.lila); 
     for (int i = 0; i < items.size(); i++) { 
      CheckBox cb = new CheckBox(this); 
      cb.setText(String.valueOf(items.get(i))); 
      cb.setId(i); 
      ll.addView(cb); 

     } 
     Button btn = new Button(this); 
     btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150)); 
     btn.setText("submit"); 
     ll.addView(btn); 

     btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       for (int i : items) { 
        //boolean checked = ((CheckBox)v).isChecked(); 
        CheckBox ch=(CheckBox) findViewById(i); 
        if (ch.isChecked()) { 

         Toast.makeText(getApplicationContext(), 
            "Button is clicked" + ch, Toast.LENGTH_LONG).show(); 

        } 
       } 

      } 
     }); 

    } 

XML файл:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.bustracker.MainActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:paddingLeft="10dp" 
     android:text="Select route: " 
     android:textSize="30sp" /> 

    <LinearLayout 
     android:id="@+id/lila" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.75" 
     android:orientation="vertical" > 
    </LinearLayout> 



</LinearLayout> 

ответ

1

Изменить ваш первый цикл для этого

for (int i = 0; i < items.size(); i++) { 
     CheckBox cb = new CheckBox(this); 
     cb.setText(String.valueOf(items.get(i))); 
     cb.setId(items.get(i)); 
     ll.addView(cb); 

    } 

Edit: Для того, чтобы отобразить все значения в одном тосте, вы можете сделать что-то вроде

@Override 
     public void onClick(View v) { 
      String message = ""; 
      for (int i : items) { 
       //boolean checked = ((CheckBox)v).isChecked(); 
       CheckBox ch=(CheckBox) findViewById(i); 
       if (ch.isChecked()) { 
        message = message + " " + ch.getText() + " " ;     
       } 
      } 
      Toast.makeText(getApplicationContext(), 
           "Button is clicked " + message, Toast.LENGTH_LONG).show(); 

     } 
+0

Я изменил 'CheckBox ch = (CheckBox) findViewById (i);' to 'CheckBox ch = (CheckBox) MainActivity.this.findViewById (i);' но я все равно получаю ту же ошибку ?! –

+0

Не могли бы вы разместить свой метод onCreate(), когда вы вызываете метод createCheckBoxList() вместе с параметрами? –

+0

Я разместил его, пожалуйста, просмотрите мой обновленный код вопроса. –

1

Try установить идентификатор флажка для items.get (I) не я

+0

Вы имеете в виду эту строку 'CheckBox ch = (CheckBox) ll.findViewById (i);' to 'CheckBox ch = (CheckBox).get (i); 'Я получаю' Нельзя отличить из Integer в CheckBox' –

+1

Нет, я имею в виду эту строку cb.setId (i); на cb.setId (items.get (i)); – Exception