简体   繁体   English

进度条未显示在片段[ANDROID]中

[英]Progress Bar not showing in fragment [ANDROID]

In my app i am using this library https://github.com/DmitryMalkovich/circular-with-floating-action-button to implement progress bar with floating action button. 在我的应用程序中,我正在使用此库https://github.com/DmitryMalkovich/circular-with-floating-action-button来实现带有浮动动作按钮的进度条。 Its working on activity but when i included this layout in my fragment's layout progress bar doesn't show. 它正在处理活动,但是当我在片段的布局进度栏中包含此布局时,它不会显示。 Here is my code for better explanation Please guide me where i am going wrong Any help will be appreciated. 这是我的代码,可以提供更好的解释。请指导我哪里出错了,我们将不胜感激。 customlayout.xml 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 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>

I am hiding and showing the parent layout of customlayout.xml on runtime when i get data from serivice, before service call i SHOW it with View.VISIBLE and after service call i HIDE it with View.GONE 当我从服务中获取数据时,我在运行时隐藏并显示customlayout.xml的父级布局,在服务调用之前,我使用View.VISIBLE显示它,而在服务调用之后,我使用View.GONE隐藏它

UPDATED Java code 更新的 Java代码

Fragment 分段

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

CustomClass CustomClass

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

make your customlayout at the bottom with the parent layout. 在父布局的底部进行自定义布局。 so your z index for that layout is at the top and it will be visible and gone that can be seen by you. 因此该布局的z索引位于顶部,并且您可以看到它并消失了。

You need to use CoordinatorLayout with FAB . 您需要将CoordinatorLayout与FAB一起使用。

Just put your FAB inside CoordinatorLayout . 只需将您的FAB放入CoordinatorLayout

As you can see library sample code suggests to use it too. 如您所见,库示例代码建议也使用它。

<?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>

try this: 尝试这个:

  @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;
  }

or 要么

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

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

 }

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

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