【问题标题】:Progress Bar not showing in fragment [ANDROID]片段[ANDROID]中未显示进度条
【发布时间】:2017-09-24 17:27:33
【问题描述】:

在我的应用程序中,我正在使用这个库 https://github.com/DmitryMalkovich/circular-with-floating-action-button 使用浮动操作按钮实现进度条。它正在处理活动,但是当我将此布局包含在我的片段的布局进度条中时没有显示。 这是我的代码以获得更好的解释 请指导我哪里出错了 任何帮助将不胜感激。 customlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"
   >

<com.dmitrymalkovich.android.ProgressFloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:clickable="true">

        <ProgressBar
            android:id="@+id/progressbar"
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"/>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/floatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/transparent_logo"
            app:backgroundTint="@color/bg_color"
            android:layout_centerInParent="true"
           />

   </com.dmitrymalkovich.android.ProgressFloatingActionButton>


</RelativeLayout>

fragmentlayout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layoutcontainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="bg_color"
    >
    <include
        layout="@layout/customlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
   <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <include
        layout="@layout/otherlayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

当我从服务获取数据时,我在运行时隐藏并显示 customlayout.xml 的父布局,在服务调用之前我用 View.VISIBLE 显示它,在服务调用之后我用 View.GONE

更新 Java 代码

片段

public class MyFragment extends Fragment {
    private Context context;

    //root view of layout
    View rootView;
    private static final String ARG_PARAM1 = "Class";
    private String screen_title;
    private String URL = "";

    public MyFragment() {
        // Required empty public constructor
    }

    public static MyFragment newInstance(String param1) {
        MyFragmentfragment = new MyFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity();
        if (getArguments() != null) {
            screen_title = getArguments().getString(ARG_PARAM1);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView = inflater.inflate(R.layout.fragmentlayout, container, false);
        //find views by ids
        getData();
        return rootView;
    }

    private void getData() {
        CustomClass.getInstance(context, rootView).show();
        //service call
       //on getting response from serivce (have implemented a listener here)
        CustomClass.getInstance(context, rootView).hide();    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

自定义类

public class CustomClass {

    private ProgressBar mProgressBar;
    private FloatingActionButton mFab;
    private RelativeLayout parentLayout;
    private LayoutInflater inflater;


    private static CustomClass custom;

    private CustomClass (Context context) {
        findViewsById(context);
    }

    private CustomClass (View view) {
        findViewsById(view);
    }

    public static CustomClass getInstance(Context context, View view) {
        custom = new CustomClass (view);
        custom.setPColor(context);
        return custom;
    }

    public static CustomClass getInstance(Context context) {
        custom = new CustomClass (context);
        custom.setPColor(context);
        return custom;
    }

    private void setPColor(Context context) {
        if (mProgressBar != null)
            mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.bluecolor), android.graphics.PorterDuff.Mode.MULTIPLY);
    }

    private void findViewsById(View view) {
        if (view != null) {
            mProgressBar = (ProgressBar) view.findViewById(R.id.custom_progressbar);
            mFab = (FloatingActionButton) view.findViewById(R.id.custom_floatingActionButton);
            parentLayout = (RelativeLayout) view.findViewById(R.id.rl_progress_fab_container);

        }
    }

    private void findViewsById(Context context) {
        Activity activity = (Activity) context;
        if (activity != null) {
            mProgressBar = (ProgressBar) activity.findViewById(R.id.custom_progressbar);
            mFab = (FloatingActionButton) activity.findViewById(R.id.custom_floatingActionButton);
            parentLayout = (RelativeLayout) activity.findViewById(R.id.rl_progress_fab_container);

        }
    }

    public void show() {
        if (custom.parentLayout != null)
            custom.parentLayout.setVisibility(View.VISIBLE);
    }

    public void hide() {
        if (custom.parentLayout != null)
            custom.parentLayout.setVisibility(View.GONE);
    }

【问题讨论】:

  • 还要添加服务代码,你在哪里隐藏或可见进度条。
  • 改变FAB和进度条的顺序
  • 把你的java代码放在这里
  • @AldrinMathew 试过了,不行
  • @User 代替容器 hide ,尝试 include id 作为隐藏和显示。

标签: android android-webview android-progressbar


【解决方案1】:

试试这个:

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            rootView = inflater.inflate(R.layout.fragmentlayout, container, false);
            //find views by ids
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    getData();
                }
            });
            return rootView;
  }

private void getData() {
     getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    CustomClass.getInstance(context, rootView).show();

        CustomClass.getInstance(context, rootView).hide(); 
                }
            });

 }

【讨论】:

    【解决方案2】:

    您需要将 CoordinatorLayout 与 FAB 一起使用。

    只需将您的 FAB 放入 CoordinatorLayout

    如您所见,库示例代码也建议使用它。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.dmitrymalkovich.android.progressfabsample.ScrollingActivity">
    
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
    
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    
    <com.dmitrymalkovich.android.ProgressFloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:clickable="true"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end">
    
        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_backup_black_24dp"
            app:backgroundTint="@color/colorFab" />
    
        <ProgressBar
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </com.dmitrymalkovich.android.ProgressFloatingActionButton>
    
    <com.dmitrymalkovich.android.ProgressFloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:clickable="true">
    
        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_backup_black_24dp"
            app:backgroundTint="@color/colorFab" />
    
        <ProgressBar
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </com.dmitrymalkovich.android.ProgressFloatingActionButton>
    

    【讨论】:

    • 那么进度条在哪里呢?能否提供一个简单的示例代码
    • @User 只需将 RealativeLayout 替换为 CoordinatorLayout。实际上,您在此 lin github 中有示例应用程序。检查实现here
    【解决方案3】:

    使用父布局在底部制作您的自定义布局。 因此您的该布局的 z 索引位于顶部,它将可见并消失,您可以看到。

    【讨论】:

    • 你的意思是我应该在 fragmentlayout.xml 的末尾包含 customlayout.xml?
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2017-02-12
    相关资源
    最近更新 更多