如何在 Android 工作室中从现有活动创建片段

Posted

技术标签:

【中文标题】如何在 Android 工作室中从现有活动创建片段【英文标题】:How to create fragments in Android studios from existing activities 【发布时间】:2016-05-02 21:35:09 【问题描述】:

我在网上搜索过,但仍然无法找到有关如何从现有活动创建片段的任何帮助。例如,我有一个仪表板活动和一个菜单活动,我想用它们创建片段,以便它将平板电脑上的两个页面显示为一个屏幕。

我还想创建从菜单页面到其他页面的片段。例如,一旦单击其中一个活动,我想在一侧显示菜单页面,而在另一侧显示类别。

我只能找到列表视图和详细示例。我是否需要为每个活动创建片段。请指教。

菜单活动。爪哇

public class MenuActivity extends ActionBarActivity 


    private Toolbar toolbar;

    ImageButton museummenubtn;
    ImageButton theatremenubtn;
    ImageButton fooddrinkmenubtn;
    ImageButton leisuremenubtn;
    ImageButton shoppingmenubtn;
    ImageButton historicalmenubtn;
    ImageButton parkmenubtn;
    ImageButton familyfunmenubtn;
    ImageButton travelinformenubtn;


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

        ImageButton museummenubtn = (ImageButton) findViewById(R.id.museum_icon);
        museummenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), MuseumActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton theatremenubtn = (ImageButton) findViewById(R.id.theatre_icon);
        theatremenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), TheatreActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton fooddrinkmenubtn = (ImageButton) findViewById(R.id.fooddrink_icon);
        fooddrinkmenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), FoodAndDrinksActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton leisuremenubtn = (ImageButton) findViewById(R.id.leisure_icon);
        leisuremenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), LeisureActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton shoppingmenubtn = (ImageButton) findViewById(R.id.shopping_icon);
        shoppingmenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), ShoppingActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton historicalmenubtn = (ImageButton) findViewById(R.id.histroy_icon);
        historicalmenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), HistoricalActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton parkmenubtn = (ImageButton) findViewById(R.id.park_icon);
        parkmenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), ParksActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton familyfunmenubtn = (ImageButton) findViewById(R.id.familyfun_icon);
        familyfunmenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), FamilyFunActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );

        ImageButton travelinformenubtn = (ImageButton) findViewById(R.id.travelinfor_icon);
        travelinformenubtn.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 
                Intent myIntent = new Intent(view.getContext(), TravelInformationActivity.class);
                startActivityForResult(myIntent, 0);
                finish();
            

        );


        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        setSupportActionBar(toolbar);

    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 

        int id = item.getItemId();

        if (id == R.id.action_user) 
            Intent intent= new Intent(this,DashboardActivity.class);
            startActivity(intent);
            return true;
        

        int id1 = item.getItemId();

        if (id1 == R.id.action_setting) 
            Intent intent= new Intent(this,DashboardActivity.class);// Settings Class once it is created.
            startActivity(intent);
            return true;
        

        return super.onOptionsItemSelected(item);
    


activitymenu.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_

    tools:context=".MainActivity">

    <include
        android:id="@+id/tool_bar"
        layout="@layout/tool_bar"
        ></include>


    <RelativeLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_
        android:id="@+id/linearLayout"
        android:weightSum="1"
        android:background="#ffffff"
        android:layout_below="@+id/tool_bar">

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/museum_icon"
            android:background="#ffffff"
            android:src="@drawable/museumicon"
            android:scaleType="fitXY" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/theatre_icon"
            android:background="#00000000"
            android:src="@drawable/theatreicon"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/museum_icon"
            android:layout_toEndOf="@+id/museum_icon"
            android:scaleType="fitXY" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/fooddrink_icon"
            android:src="@drawable/foodicon"
            android:background="#ffffff"
            android:layout_gravity="center_vertical"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/theatre_icon"
            android:layout_toEndOf="@+id/theatre_icon"
            android:scaleType="fitXY" />

    </RelativeLayout>

    <RelativeLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout2"
        android:background="#ffffff">

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/leisure_icon"
            android:background="#ffffff"
            android:scaleType="fitXY"
            android:src="@drawable/leisureicon" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/shopping_icon"
            android:background="#00000000"
            android:scaleType="fitXY"
            android:src="@drawable/shoppingicon"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/leisure_icon"
            android:layout_toEndOf="@+id/leisure_icon" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/histroy_icon"
            android:src="@drawable/historicalicon"
            android:scaleType="fitXY"
            android:background="#ffffff"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/shopping_icon"
            android:layout_toEndOf="@+id/shopping_icon" />
    </RelativeLayout>
    <RelativeLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_
        android:id="@+id/linearLayout3"
        android:layout_below="@+id/linearLayout2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="#ffffff"
        android:layout_alignParentBottom="true">

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/park_icon"
            android:background="#ffffff"
            android:scaleType="fitXY"
            android:src="@drawable/parkicon" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/familyfun_icon"
            android:background="#00000000"
            android:scaleType="fitXY"
            android:src="@drawable/familyfunicon"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/park_icon"
            android:layout_toEndOf="@+id/park_icon" />

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/travelinfor_icon"
            android:src="@drawable/travelicon"
            android:scaleType="fitXY"
            android:background="#ffffff"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/familyfun_icon"
            android:layout_toEndOf="@+id/familyfun_icon" />
    </RelativeLayout>


</RelativeLayout>

MuseumActvity.XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_

tools:context=".MainActivity">

<include
    android:id="@+id/tool_bar"
    layout="@layout/tool_bar"
    ></include>

<LinearLayout
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:layout_below="@+id/tool_bar"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:weightSum="1"
    android:id="@+id/linearLayout4">

    <ImageButton
        android:layout_
        android:layout_
        android:id="@+id/musehead"
        android:scaleType="fitXY"
        android:src="@drawable/museumhead"
        android:background="#ffffff" />
</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/linearLayout4" >

    <ImageButton
        android:layout_
        android:layout_
        android:id="@+id/imageButton"
        android:scaleType="fitXY"
        android:src="@drawable/gallerieshead"
        android:background="#ffffff" />
</LinearLayout>

</RelativeLayout>

我想从这两个活动中创建一个片段,使其适合平板电脑屏幕尺寸。

【问题讨论】:

在结构上(代码方面),您只需膨胀视图而不是使用 setContentView 并拥有 onCreateView 和 onCreate。除此之外,没有太多其他变化。你到底有什么问题? 我在创建片段时遇到问题,是否需要为每个活动创建一个片段。它是否正确?。我希望我的应用程序支持平板电脑和手机。 “我对 x 有问题”不是很有描述性...是的,您需要为每个单独的 layout 创建一个片段,这些片段当前使用单个活动显示.但是您还需要一个 Activity 类来显示这些片段。如果您为您尝试转换的活动添加代码,可以给出更详细的答案 我已经用代码更新了我的问题。例如,我有一个菜单活动,然后我有各种不同的活动,如博物馆、剧院、食品和饮料等。我想创建片段,以便它适合平板电脑尺寸,我在一个视图上同时显示 a 和 B。跨度> 【参考方案1】:

您不需要为每个活动单独的片段。你可以这样做: 将您的菜单活动设置为片段,这样您将拥有菜单片段,然后您可以从片段容器在其他活动中加载菜单。

同样,您可以在应用程序的任何位置将菜单和仪表板保持在一个活动中。

【讨论】:

Max 你有我可以学习的教程或任何帮助吗? 本教程会帮助你androidhive.info/2013/11/… 谢谢 Max,非常感谢您的帮助。【参考方案2】:

您不需要为每个活动创建片段,您可以为活动使用多个片段 AS 在您的问题中,例如,如果您想在一侧显示菜单页面并在一侧显示类别另一方一旦点击了其中一个活动 :- 为此,您可以创建两个片段并在您的单个活动中使用这两个片段,如果您有这样的要求,您可以在多个活动中使用一个片段。

查看一些关于 Fragment 的好教程

Android - Fragments 和 Official documentation

你会很容易知道的。

【讨论】:

Amit Vaghela 我还在苦苦挣扎,你能不能给我一个更像我的例子,因为所有的片段都是关于列表视图和详细视图的。我的更像是带有所有图像按钮的菜单视图,然后是另一页上的图像视图。请指教? 检查这个例子 - grokkingandroid.com/adding-action-items-from-within-fragments 和 java2s.com/Code/Android/UI/… @J.Doe Amit Vaghela,非常感谢您的帮助,但是这些示例是关于操作栏菜单的。地雷有点但不同。我目前有10个活动。一个是菜单活动,其余是类别活动,我目前创建了一个名为菜单片段的片段。我还需要创建多少片段?。

以上是关于如何在 Android 工作室中从现有活动创建片段的主要内容,如果未能解决你的问题,请参考以下文章

Android 通知导航到现有活动

如何在 Eclipse 中从现有源创建项目然后找到它?

Android:使用 putExtra 从片段访问容器活动对象?

如何在主活动中正确检索片段中的视图

Android:单击片段中的按钮时如何通知活动? [复制]

Android开发——UI_片段