2013-12-17 5 views
0

Я пытаюсь создать новый FrameLayout каждый раз, когда я нажимаю кнопку. На данный момент я вручную реализовал 3 FrameLayouts, и когда я нажимаю кнопку, все 3 становятся видимыми. Все, что я хочу сейчас для одного FrameLayout быть установлен в видимой, а затем, если кнопка нажата снова, второй FrameLayout появляться и т.д .. Код Java:Создайте новый FrameLayout при нажатии кнопки - Android

public class MainActivity extends Activity { 

    public final static String EXTRA_MESSAGE = "com.example.viginti.MESSAGE"; 
    int hoursValue; 
    int minutesValue; 
    int finalMinutes; 
    int finalHours; 
    int correctDivision; 
    int timeLeft; 
    int twentyFour; 
    int i, x; 
    NumberPicker np_hours; 
    NumberPicker np_minutes; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     fillArray(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public void generateAnswer(View view) { 

     hoursValue = np_hours.getValue(); 
     minutesValue = np_minutes.getValue(); 

     try { 
      twentyFour = 24; 
      correctDivision = 10; 
      finalMinutes = minutesValue/correctDivision; 
      finalHours = twentyFour - hoursValue; 
      timeLeft = finalHours - finalMinutes; 
     } catch(NumberFormatException e) { 
      /** DEBUGGING */ 
      System.out.println("Number Format Exception: " + e); 
     } 
     String finalResult = Integer.toString(timeLeft); 
     Intent displayData = new Intent(this, DisplayData.class); 
     displayData.putExtra(EXTRA_MESSAGE, finalResult); 
     startActivity(displayData); 
    } 

    public void fillArray() { 
     np_hours = (NumberPicker) findViewById(R.id.hourNumber); 
     np_minutes = (NumberPicker) findViewById(R.id.minuteNumber); 
     String[] hoursArray = new String[25]; 
     String[] minutesArray = new String[61]; 
     for(i = 0; i < hoursArray.length; i++) { 
      hoursArray[i] = Integer.toString(i); 
     } 

     for(x = 0 ; x < minutesArray.length; x++){ 
      minutesArray[x] = Integer.toString(x); 
     } 
     np_hours.setMinValue(0); 
     np_hours.setMaxValue(24); 
     np_hours.setWrapSelectorWheel(false); 
     np_hours.setDisplayedValues(hoursArray); 

     np_minutes.setMinValue(0); 
     np_minutes.setMaxValue(60); 
     np_minutes.setWrapSelectorWheel(false); 
     np_minutes.setDisplayedValues(minutesArray); 
    } 

    @SuppressLint("NewApi") 
    public void adActivity(View view) { 

     //Add first frame 
     FrameLayout addActivities = (FrameLayout)findViewById(R.id.frameLayout2); 
     addActivities.setVisibility(View.VISIBLE); 

     //Add second frame 
     FrameLayout addActivities1 = (FrameLayout)findViewById(R.id.frameLayout3); 
     addActivities1.setVisibility(View.VISIBLE); 
     //Add third frame 
     FrameLayout addActivities2 = (FrameLayout)findViewById(R.id.frameLayout4); 
     addActivities2.setVisibility(View.VISIBLE); 
     fillArray(); 
    } 
} 

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" 
    tools:context=".MainActivity" > 


    <ImageView 
     android:id="@+id/featuredimage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="18dp" 
     android:clickable="true" 
     android:onClick="generateAnswer" 
     android:scaleType="centerCrop" 
     android:src="@drawable/generate_button" /> 

     <ImageView 
     android:id="@+id/addActivity" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="50dp" 
     android:clickable="true" 
     android:onClick="adActivity" 
     android:src="@drawable/add_activity" /> 

    <FrameLayout 
     android:id="@+id/frameLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" > 

      <Spinner 
       android:id="@+id/plan" 
       android:layout_width="121dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="0dp" 
       android:layout_marginTop="15dp" 
       android:entries="@array/daily_plans" /> 

      <NumberPicker 
       android:id="@+id/hourNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="24dp"/> 

      <NumberPicker 
       android:id="@+id/minuteNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="10dp" /> 
     </LinearLayout> 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/frameLayout2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/frameLayout1" 
     android:visibility="gone"> 


     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" > 

      <Spinner 
       android:id="@+id/plan1" 
       android:layout_width="121dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="0dp" 
       android:layout_marginTop="15dp" 
       android:entries="@array/daily_plans" /> 

      <NumberPicker 
       android:id="@+id/hourNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="24dp"/> 

      <NumberPicker 
       android:id="@+id/minuteNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="10dp" /> 
     </LinearLayout> 
    </FrameLayout> 
    <FrameLayout 
     android:id="@+id/frameLayout3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/frameLayout2" 
     android:visibility="gone"> 


     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" > 

      <Spinner 
       android:id="@+id/plan1" 
       android:layout_width="121dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="0dp" 
       android:layout_marginTop="15dp" 
       android:entries="@array/daily_plans" /> 

      <NumberPicker 
       android:id="@+id/hourNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="24dp"/> 

      <NumberPicker 
       android:id="@+id/minuteNumber" 
       android:layout_width="40dp" 
       android:layout_height="70dp" 
       android:layout_marginLeft="10dp" /> 
     </LinearLayout> 
    </FrameLayout> 
    <FrameLayout 
      android:id="@+id/frameLayout4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/frameLayout3" 
      android:visibility="gone"> 


      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="horizontal" > 

       <Spinner 
        android:id="@+id/plan1" 
        android:layout_width="121dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="0dp" 
        android:layout_marginTop="15dp" 
        android:entries="@array/daily_plans" /> 

       <NumberPicker 
        android:id="@+id/hourNumber" 
        android:layout_width="40dp" 
        android:layout_height="70dp" 
        android:layout_marginLeft="24dp"/> 

       <NumberPicker 
        android:id="@+id/minuteNumber" 
        android:layout_width="40dp" 
        android:layout_height="70dp" 
        android:layout_marginLeft="10dp" /> 
      </LinearLayout> 
     </FrameLayout> 

</RelativeLayout> 

Стоит отметить, что я довольно новичок в разработке Android. Кроме того, если есть лучший способ генерации FrameLayouts каждый раз, когда кнопка нажата (и правильно позиционирует их), я бы хотел услышать!

Большое спасибо за помощь!

+0

Может быть лучший способ создать эффект, над которым вы работаете. Почему вы добавляете их в свой макет? – Phil

ответ

1

Нет ничего плохого в Вашем решении, если оно делает то, что вы хотите. На самом деле, мне нравится ваше решение по поводу добавления виджетов программно, потому что,

  • Вы можете поместить их туда, где вы хотите, чтобы все было, и сделать его хорошо выглядеть в визуальном редакторе;
  • Вы можете использовать разные ресурсы (например, стили, размеры, макеты и чертежи), чтобы они выглядели хорошо на различных экранах;
  • Вы можете создать другой макет для пейзажей и планшетов;
  • А между тем вы можете легко подключить виджеты в своем коде (поскольку вы уже указали им идентификатор в файле XML).

Возможно, вы захотите поместить все это в прокрутку, в ситуациях, когда вы не можете настроить его на маленький экран.

+0

Спасибо, много! Да, я нашел это намного проще, мне просто нужно заставить его добавить макет, когда нажимается кнопка (вместо всех 3 i.e. 1 каждый раз, когда нажимается кнопка). –

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