обработка LinearLayout в ScrollView

#android

#Android

Вопрос:

Первоначально у меня был LinearLayout> ScrollView> TableLayout и приведенный ниже код:

 LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.photos_layout, null);
setContentView(layout);
// TODO Auto-generated method stub
//get the tableLayout which we created in main.xml
tl = (TableLayout)findViewById(R.id.tableLayout1);
for(int i = 0; i < names.length; i  ) {
    //Create a new row to be added.
    TableRow tr = new TableRow(this);
    //Create text views to be added to the row.
    TextView tv1 = new TextView(this);
    TextView tv2 = new TextView(this);
    //Put the data into the text view by passing it to a user defined function createView()
    createView(tr, tv1, Integer.toString(i 1));
    createView(tr, tv2, names[i]);
    //Add the new row to our tableLayout tl
    tl.addView(tr);
}
  

Проблема в том, что ScrollView может иметь только одного дочернего элемента, поэтому, если бы я хотел добавить больше представлений в дополнение к TableLayout, я не могу. Чтобы преодолеть эту проблему, я создал иерархию, подобную LinearLayout> ScrollView> LinearLayout> TableLayout. Однако теперь приведенный выше код приводит к сбою приложения.

Что мне нужно изменить, чтобы заполнить мою таблицу, а также добавить представления в мое недавно созданное linearlayout?

Комментарии:

1. Если у вас возникают сбои, вы должны включить вывод LogCat здесь

2. опубликуйте журнал сбоев. и некоторые XML-файлы?

3. Прежде всего, опубликуйте трассировку стека сбоя. Во-вторых, почему бы просто не создать весь макет полностью в xml или полностью программно? Если вы собираетесь делать это программно, вы должны определить параметры макета для добавления представлений к их родителям. Кроме того, scrollview может иметь только одного ПРЯМОГО дочернего элемента. Таким образом, вы можете разместить все, что хотите, внутри linearlayout, который находится внутри scrollview. Кроме того, могу я спросить, чего именно вы пытаетесь достичь? Вероятно, вы слишком усложняете свое представление…

4. ну, прямо сейчас это просто тестовое приложение, чтобы познакомиться с Android. У меня есть моя активность, и я хочу поместить в нее tablelayout и несколько кнопок. Он будет больше экрана, поэтому я поместил его внутри ScrollView. Но я думаю, что последую вашему совету и сделаю все это программно; Я ненавижу выяснять, как соединить макет и код.

5. @Adam опубликуйте журнал. Без этого мы не сможем вам помочь. Кроме того, вам, вероятно, просто нужен GridView или что-то в этом роде.

Ответ №1:

Я бы предложил удалить родительский LinearLayout. Scrollview сам по себе может быть родительским, а затем иметь один LinearLayout в качестве единственного прямого дочернего элемента.

В опубликованном вами коде, о котором вы упомянули, произошел сбой, вы не добавляете никакого представления к своему «вновь созданному» LinearLayout, вместо этого вы добавляете новую строку в свой TableLayout, которая, если я правильно догадываюсь, находится внутри вашего scrollview. Это совершенно нормально и не должно быть причиной сбоя.