Добавить больше элементов в ListView внутри фрагмента

Как обычно, я могу легко добавить больше элементов в ListView. Но проблема возникает, когда мой ListView внутри Fragment.

public class QuestionFragment extends Fragment {
ExaminationActivity activity;
Question question;

TextView lblQuestion;
ListView listChoice;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activity = (ExaminationActivity) getActivity();
    question = activity.getCurrentView();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_question, container, false);
    lblQuestion = (TextView) view.findViewById(R.id.lbl_question);
    lblQuestion.setText(question.getTitle());
    listChoice = (ListView) view.findViewById(R.id.list_option);

    listChoice.setAdapter(new ChosenAdapter(activity, 0, question.getMutipleChoice(), question.getUserChoice()));
    return view;
}

private class ChosenAdapter extends ArrayAdapter<String> {
    Context context;
    ArrayList<String> multipleChoice;
    int selected;

    public ChosenAdapter(Context context, int resource, ArrayList<String> multipleChoice, int selected) {
        super(context, resource, multipleChoice);
        this.context = context;
        this.multipleChoice = multipleChoice;
        this.selected = selected;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        View view = inflater.inflate(R.layout.view_chosen_item, parent);
        RadioButton radio = (RadioButton) view.findViewById(R.id.radio_choice);
        radio.setChecked((selected == position));
        TextView lbl_title = (TextView) view.findViewById(R.id.lbl_title);
        lbl_title.setText(multipleChoice.get(position));
        Log.i("INFO", "chosen " + multipleChoice.get(position));
        return view;
    }
}
}

и ошибка:

10-24 22:48:23.391 31862-31862/com.dragonfly.tracnhiem E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.dragonfly.tracnhiem, PID: 31862 android.view.InflateException: строка двоичного XML-файла № 15: addView (View, LayoutParams) не поддерживается в AdapterView в android.view.LayoutInflater.inflate(LayoutInflater.java:539) в android.view.LayoutInflater.inflate(LayoutInflater.java:423) в android.view.LayoutInflater.inflate(LayoutInflater .java:374) в com.dragonfly.tracnhiem.activity.QuestionFragment$ChosenAdapter.getView(QuestionFragment.java: 65)


person Nguyen Dang    schedule 24.10.2016    source источник


Ответы (1)


ListView, который работает с адаптером, не позволяет добавлять представления ни из кода, ни из макета XML (как в вашем случае). Вместо этого вам нужно добавить элементы данных в адаптер из вашего кода. Не забудьте вызвать adapter.notifyDataSetChanged(), если элементы данных были добавлены после того, как представление было связано с адаптером. Дополнительные сведения см. в этом руководстве: Создание макетов с помощью адаптера.

person Y2i    schedule 24.10.2016
comment
Я просто создаю приложение с множественным выбором. Для каждого отображения вопроса я заменяю фрагмент новыми данными и макетом xml, как показано ниже: - person Nguyen Dang; 25.10.2016
comment
‹?xml version=1.0 › ‹LinearLayout android:orientation=vertical android:layout_width=match_parent android:layout_height=match_parent› ‹TextView android:id=@+id/lbl_question android:text=Question One android:textSize=16dp android:layout_width =match_parent android:layout_height=wrap_content /› ‹ListView android:id=@+id/list_option android:background=#CFC android:layout_width=match_parent android:layout_height=match_parent›‹/ListView› ‹/LinearLayout› - person Nguyen Dang; 25.10.2016
comment
не могли бы вы дать мне лучшее решение, отображать параметр в ListView, а множественный выбор отключен и сохранять выбранное в базе данных. - person Nguyen Dang; 25.10.2016