Тест Fallo en adapter de App para hacer preguntas

Тест Estoy haciendo una App de preguntas y а-ля хора ошибка de hacer el adapter debo de tener algún горная цепь porque al ejecutar la App ésta se automáticamente. Принципал La actividad es la siguiente:

public class ActivityTest extends AppCompatActivity {
    private Button back;
    private Test test;
    private ListView listViewTest;
    private TextView textViewQuestion;
    private ArrayAdapter<Question> adapter;
    private RadioButton[] radioButtonsAnswers;
    private int contOK;
    private boolean[] Verify;
    private String correctAnswer;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_test);
        test = GeneradorTest.generarTest();
        listViewTest = (ListView) findViewById(R.id.listViewtest);
        adapter = new TestAdapter(this,R.id.activity_pregunta,R.id.textViewQuestion,R.id.imageViewQuestion,R.id.radiogroup_answers,R.id.check,test.getQuestions());
        listViewTest.setAdapter(adapter);
        back = (Button)findViewById(R.id.back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

Con esto la pregunta se generaba bien y mostraba la pregunta y las posibles respuestas.

Адаптер Al poner el siguiente горная цепь es cuando da error y la App se:

public class TestAdapter extends ArrayAdapter<Question> {
    private int buttonGroup;
    private int imageViewQuestion;
    private int imageViewVerify;
    private int[] radioButtons;

    public TestAdapter(Context context, int layout, int textViewQuestion,  int imageViewQuestion, int buttonGroup, int imageViewVerify, List<Question> objects) {
        super(context, layout, textViewQuestion, objects);
        this.buttonGroup = buttonGroup;
        this.imageViewQuestion =imageViewQuestion;
        this.imageViewVerify = imageViewVerify;
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View result = convertView;
        RadioGroup rg = (RadioGroup) convertView.findViewById(buttonGroup);
        ImageView imviewQuestion = (ImageView) convertView.findViewById(imageViewQuestion);
        ImageView imviewVerify = (ImageView) convertView.findViewById(imageViewVerify);

        Question q = this.getItem(position);

        imviewQuestion.setImageBitmap(q.getImage());
        if(q.getResposta()==-1 || !q.isCorrect()) {
            imviewVerify.setImageBitmap(null); //imatge a mostrar
        }
        else{
            imviewVerify.setImageBitmap(null); //imatge correcte
        }
        rg.check(q.getResposta());
        for(int i=0; i<q.getRespostes().length; i++) {
            ((RadioButton)rg.getChildAt(i)).setText(q.getRespostes()[i]);
        }
       // rg.setOnCheckedChangeListener();//quan canvi el seleccionat, modifica resposta
        return super.getView(position, convertView, parent);
    }
}

Ошибка El que я da es el siguiente:

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

СИ Agradecería alguien pudiera сабля надела puede Эстар el ошибка.

Сабля Otra cosa que me gustaría es реализатор Комо el setOnCheckedChangeListener () para poder cambiar la respuesta seleccionada.

Gracias.

0
задан 16.01.2017, 21:59
0 ответов

Ошибка показывает:

java.lang. NullPointerException: Виртуальный Attempt to invoke method 'android.view. View android.view. View.findViewById (int)' on в null object reference

То, что означает, что ты стараешься называть метод findViewById(int) в виде со стоимостью null, ошибка случается после того, как старается получать ссылку элемента в виде, но видна, convertView у него есть стоимость null:

RadioGroup rg = (RadioGroup) convertView.findViewById(buttonGroup);
ImageView imviewQuestion = (ImageView) convertView.findViewById(imageViewQuestion);
ImageView imviewVerify = (ImageView) convertView.findViewById(imageViewVerify);

То, что осуществляется обычно внутри метода getView (), состоит в том, чтобы проверять, если контейнер convertView он содержит стоимость, если это не так, ты должен надувать вид, который содержит элементы, которые ты искал внутри той же самой:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {


   if( convertView == null ){
    //Creamos la vista:
       convertView = inflater.inflate(R.layout.my_list_item, parent, false);
    }

      //  View result = convertView;
        RadioGroup rg = (RadioGroup) convertView.findViewById(buttonGroup);
        ImageView imviewQuestion = (ImageView) convertView.findViewById(imageViewQuestion);
        ImageView imviewVerify = (ImageView) convertView.findViewById(imageViewVerify);

Ты можешь видеть одни пример Adapter и проверять то, что осуществляется внутри getView ():

ListView и персонализированный Adapter.

Adapter, настроенный в Android.

2
ответ дан 03.12.2019, 17:40

Ты нуждаешься в том, чтобы надуть твой вид перед тем, как мочь соглашаться на нее, сосредоточись на этом примере:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
   // Get the data item for this position
   User user = getItem(position);    
   // Check if an existing view is being reused, otherwise inflate the view
   if (convertView == null) {
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
   }
   // Lookup view for data population
   TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
   TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome);
   // Populate the data into the template view using the data object
   tvName.setText(user.name);
   tvHome.setText(user.hometown);
   // Return the completed view to render on screen
   return convertView;
}
1
ответ дан 03.12.2019, 17:40

Теги

Похожие вопросы