2013-04-30 3 views
1

Итак, я пытаюсь создать столбец кнопок. После googling для решения лучшее, что я могу найти, это поместить его в LinearLayout или что-то в этом роде, но моя проблема в том, что я использую фрагменты (в частности, тип навигации «Tabs + Swipe»), и он не использует насколько я могу это видеть. (Ну, хорошо, это делает, но не на PageViewer) Для того, чтобы получить одну кнопку я модифицированную сгенерированный код, чтобы выглядеть какСоздание столбца кнопок в макете фрагмента

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     final TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 

     final Button button = (Button) rootView.findViewById(R.id.button1); 
     button.setText("Btn Text"); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
            // Perform action on click 
      } 
     }); 

После консультации с ребятами над на Reddit/LearnProgramming мне сообщили, вместо того, чтобы XML для каждой кнопки, что я должен программным образом создавать кнопки и менять макет Params. я был немного смущен и потерял их помощь, поэтому я вернулся в Google. После этого мой код теперь выглядит следующим образом:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 
     dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); 

     for (int i=0;i<4;i++){ 
      final Button newButton = new Button(getActivity()); 
      newButton.setText("This is some text for"+i); 
      newButton.setTag(i); 
      arrList.add(newButton); 
      // ((ViewGroup) rootView).addView(newButton); // Works for a single button 

      ((ViewGroup) rootView).addView(newButton, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

      newButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        newButton.setText("I changed it."); 
       } 
      }); 
      } 

     return rootView; 
    } 

Что это приводит является TextView по умолчанию номер о том, на какой странице я на и четыре кнопки, которые перекрываются. Я знаю, что это перекрывается и что все они отображаются, потому что я вижу числа 1-4, перекрывающиеся. Я не новичок в программировании, но я довольно новичок в программировании на Android.

Что бы я хотел, чтобы кнопки были добавлены друг под друга в ряд. Может ли кто-нибудь подтолкнуть меня в правильном направлении? Я сделал это как можно более ясным, но если вам нужна дополнительная информация, я был бы рад добавить его. Спасибо заранее.

Edit: Вот fragment_main_dummy.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context=".MainActivity$DummySectionFragment" > 

    <TextView 
     android:id="@+id/section_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:id="@+id/MyLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/section_label" 
     android:layout_marginTop="16dp" 
     android:layout_toRightOf="@+id/section_label" 
     android:orientation="vertical" > 
    </LinearLayout> 

</RelativeLayout> 

Так что относительна, но я не вижу ссылку на RelativeLayout где-нибудь в коде, так что я был ведущим верить, что это не было быть использованным? Кроме того, я попытался добавить LinearLayout в качестве дочернего элемента в xml, но я ничего не сделал с ним.

+0

Никто не может помочь вам, если вы не упоминаете, что раскладка, где 'Buttons' добавляются. Если 'rootView' является' RelativeLayout' или 'FrameLayout', это нормально, кнопки перекрываются, поскольку вы не создавали специальные' LayoutParams'. – Luksprog

+0

Я не думаю, что есть один. Это всего лишь код из проекта eclipse по умолчанию с «Tabs + Swipe». – Vasir

+0

Ну, вы можете посмотреть, как выглядит файл 'fragment_main_dummy.xml'? Является ли корневой тег 'FrameLayout' или' RelativeLayout' (или вы можете просто разместить его в вопросе) – Luksprog

ответ

1

Попробуйте это:

for (int i=0;i<4;i++){ 
    final Button newButton = new Button(getActivity()); 
    newButton.setText("This is some text for"+i); 
    newButton.setTag(i); 
    arrList.add(newButton); 
    newButton.setId(1000 + i); 
    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    rlp.addRule(RelativeLayout.BELOW, i == 0 ? R.id.MyLayout : newButton.getId() - 1); 
    newButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      newButton.setText("I changed it."); 
     } 
    }); 
    ((RelativeLayout) rootView).addView(newButton, rlp); 
} 
+0

Это замечательно. Оно работает. Благодарю. Так что я не сделал ничего плохого, я просто никогда не давал ему правила позиционировать его под предыдущим видом? У меня есть теги, чтобы отслеживать, на которые я нажал, теперь я должен иметь возможность использовать либо тег, либо идентификатор, чтобы отслеживать, какую кнопку я нажимаю в arraylist, не так ли? – Vasir

+0

@ Vasir Да. RelativeLayout' требует, чтобы его дети имели правила размещения, указанные в них, иначе они попадают в верхний левый угол один поверх другого. Вы можете использовать идентификатор или тег, я бы использовал идентификаторы, поскольку считаю его более чистым. – Luksprog

Смежные вопросы