简体   繁体   English

单击按钮创建新的FrameLayout-Android

[英]Create new FrameLayout on button click - Android

I'm trying to create a new FrameLayout each time I click a button. 每次单击按钮时,我都试图创建一个新的FrameLayout。 At the moment I've manually implemented 3 FrameLayouts and when I click the button all 3 are set to visible. 目前,我已经手动实现了3个FrameLayout,当我单击按钮时,所有3个都设置为可见。 All I want for now is for one FrameLayout to be set to visible, then if the button is clicked again, the second FrameLayout to appear etc.. The java code: 我现在想要的只是将一个FrameLayout设置为可见,然后再次单击该按钮,第二个FrameLayout出现,依此类推。java代码:

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();
    }
}

The XML: 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>

Worth mentioning that I'm fairly new to Android development. 值得一提的是,我是Android开发的新手。 Also, if there is a better way of generating FrameLayouts each time the button is clicked (and positioning them correctly) I'd love to hear! 另外,如果每次单击按钮时都有一种更好的生成FrameLayouts的方法(并正确放置它们),我很想听听!

Thanks a lot for any help! 非常感谢您的帮助!

There is nothing wrong with your solution, if it does what you want it to. 如果解决方案符合您的要求,则没有任何问题。 In fact, I like your solution over adding widgets programmatically, because, 实际上,我喜欢您的解决方案,而不是通过编程方式添加小部件,因为,

  • You can position them where you want everything to go, and make it look good in the visual editor; 您可以将它们放置在想要一切进行的位置,并使其在可视化编辑器中看起来不错;
  • You can use different resources (like styles, dimensions, layouts, and drawables) to make it look good on different screens; 您可以使用不同的资源(例如样式,尺寸,布局和可绘制对象)使它在不同的屏幕上看起来不错;
  • You can create a different layout for landscape and tablets; 您可以为风景和平板电脑创建不同的布局;
  • And meanwhile you can wire up the widgets in your code easily (since you have already given them an id in the XML file). 同时,您可以轻松地在代码中连接小部件(因为您已经在XML文件中为其指定了ID)。

You may want to put it all in a scrollview, for situations where you can't make it fit on a small screen. 对于无法将其放置在小屏幕上的情况,您可能需要将其全部放在滚动视图中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM