Добавление представлений к TableLayout внутри фрагмента во время выполнения - PullRequest
1 голос
/ 14 марта 2012

Я просмотрел подобные вопросы и пока не нашел ответа. В конечном итоге я буду добавлять каждый из моих View после получения данных из базы данных SQL, но сейчас я просто пытаюсь добавить набор представлений, чтобы я мог заставить свой макет работать. У меня есть основное действие с менеджером фрагментов, который заставляет мои вкладки течь и загружаться очень хорошо, поэтому я не думаю, что мне нужно предоставлять этот код здесь.

Вот код для фрагмента:

public class EconFragment extends Fragment {

private ViewGroup container;


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    populateQuestions(container, inflater);
    return inflater.inflate(R.layout.econfragment, container, false);

}


public void onPause() {
    super.onPause();
    container.removeAllViews();
}

private void populateQuestions(ViewGroup v, LayoutInflater inflater) {
    container = v;
    int count = 10;
    int runner = 0;


    while (runner < count) {
    View question = inflater.inflate(R.layout.question, null);
    question.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    container.addView(question, runner);
    runner++;
    }
}
}

Так что, хотя это должно быть заполнено более чем в одном View.xml View в контейнере, у меня есть только одно отображение. Интересно отметить, что я могу наблюдать за задержкой, когда бегун увеличивается до счета, но опять же, отображается только один вид вопроса. Когда я что-то изменяю, у меня появляется множество нулевых указателей вокруг моего TableLayout, поэтому я удалил эту часть.

В конечном итоге xml EconFragment имеет макет таблицы с ScrollView, который имеет еще один TableLayout, questionContainer.

Изначально я надеялся добавить каждый вид вопроса в виде строки в questionContainer, но это доставляет мне массу неприятностей. Я полагаю, что это в некоторой степени связано с вызовом populateQuestions() до оператора return в onCreateView()?

1 Ответ

1 голос
/ 30 марта 2012

Вот как я решил проблему.Он не реализует требуемый мне доступ к дБ в SQL, у него просто есть цикл while с заполнителем и фиктивный массив строк для создания строк таблицы.Я почти закончил реализацию входа / регистрации через SQL dB, и как только это будет сделано, заполнение этих таблиц через SQL не должно быть большой проблемой.

public class EconFragment extends Fragment {


    private TableLayout questionContainer;
    static int pos = 0;
    private String[] titles = {"The first title ", "hallo1","hallo2", "hallo3",
            "hallo4", "hallo5","hallo6", "hallo7","hallo8", "hallo9"};

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d("Econ", "onCreateView");

        return inflater.inflate(R.layout.econfragment, container, false);
    }

    public void onResume() {
        super.onResume();


        LayoutInflater inflater = (LayoutInflater) getActivity().
        getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        questionContainer = (TableLayout) getActivity().findViewById(R.id.questionContainer);



        //these lines are my first attempt to try and get the questions to repopulate after returning
        //from pressing back - as of yet, they don't repopulate the screen:
        //View econFragment = inflater.inflate(R.layout.econfragment, null);
        //container.addView(econFragment);

        int leftMargin=5;
        int topMargin=5;
        int rightMargin=5;
        int bottomMargin=5;
        while (pos < 10) {
        View question = inflater.inflate(R.layout.question, null);
        question.setId(pos);
        TextView title = (TextView) question.findViewById(R.id.questionTextView);
        title.setText(titles[pos]);
        Button charts = (Button) question.findViewById(R.id.chartsButton);
        charts.setId(pos);
        charts.setOnClickListener(chartsListener);
        TableRow tr = (TableRow) question;
        TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT);
        trParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trParams);

        questionContainer.addView(tr);
        pos++;
        }
        Log.d("Econ", "onResume");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...