【问题标题】:How to show base activity's view in another activty如何在另一个活动中显示基本活动视图
【发布时间】:2019-07-18 17:22:59
【问题描述】:

我正在开发一个安卓应用程序。我想在这个应用程序中实现的是,我想制作一个必须可用于所有活动的自定义进度条。所以我创建了 BaseActivity 并在 BaseActivity 的布局中添加了一个自定义 gif,然后我创建了扩展 BaseActivity 的 SecondActivity。

BaseActivity(默认情况下 gif 不可见)有两个方法,称为 showProgressBar 和 hideProgressBar 我从 SecondActivity 调用此方法,但它没有显示进度条。然后我创建一个 BaseActivity 启动器活动并检查它显示的 gif。

我应该如何做到这一点?

【问题讨论】:

    标签: android android-activity android-fragmentactivity


    【解决方案1】:

    您可以覆盖BaseActivity 中的setContentView 并在那里添加您的基本布局,这样当子活动调用setContentView 时,基本布局也已设置。您需要设置一个 FrameLayout 来“保存”子活动的布局。以下几行应该可行。

    //In BaseActivity
    @Override
    public void setContentView(int layoutResID) 
    {
        DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
        FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
        getLayoutInflater().inflate(layoutResID, activityContainer, true);
        super.setContentView(fullView);
    }
    

    P.S - 在上面的示例中,我使用了DrawerLayout,您应该可以将它与任何ViewGroup 一起使用。只需将该行替换为基本活动布局中的基本ViewGroup


    编辑 - 为清晰起见添加了 xml

    //activity_base.xml
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/activity_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?actionBarSize"
                android:background="@color/background_material_dark"
                />
            <FrameLayout
                android:id="@+id/activity_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
        </LinearLayout>
        <android.support.design.widget.NavigationView
            android:id="@+id/navigationView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:menu="@menu/menu_base"/>
    </android.support.v4.widget.DrawerLayout>
    

    【讨论】:

    • 什么是 R.id.activity_content ?是来自activity_base的id吗?如果是,那么我们可以使用任何 id?
    • 是的,activity_contentFrameLayout 的 ID。你可以使用任何你想要的ID。 (我在答案中添加了 xml 示例)
    • 思路是将base activity的layout设置为content view,然后在FrameLayout中inflate child activity的layout。
    • 会尽力让你知道
    • 酷,如果有效,请将答案标记为正确(如果遇到任何问题,请发表评论),干杯。
    【解决方案2】:

    您可以创建一个自定义对话框类,以便项目中的每个 Activity 都可以使用它

    创建对话框类:

    public class ProgressDialog extends Dialog {
    
    public ProgressDialog(@NonNull Context context) {
        super(context);
    
        setContentView(R.layout.progress_dialog); //this is your layout for the dialog
    
        }
    }
    

    您需要做的就是立即创建对话框并像这样调用它:

    ProgressDialog progressDialog = new ProgressDialog(getContext());
    progressDialog.show(); // this line shows your dialog
    

    在您的对话框类中,您可以放置​​逻辑、更改布局的外观并执行您需要的任何操作。

    【讨论】:

    • 感谢您的意见。是的,这是另一种方式。使用这种方式我需要添加 ProgressDialog progressDialog = new ProgressDialog(getContext());进度对话框.show();这两条线在所有视图中。如果我在基本活动中添加了这一行,那么我不需要复制这些行
    • 它对您的问题有帮助吗?你对我来说有点不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多