在故障回调中改进内部设置textview可见性

时间:2018-01-29 11:17:07

标签: android android-fragments textview android-view android-runonuithread

我正在尝试设置Textview的可见性,具体取决于 Retrofit 返回的响应。 onFailure,我将可见性设置为可见tv_no_cat.setVisibility(View.VISIBLE);但是,这不起作用。我正在使用ContentLoadingProgressBar执行相同的操作并且它正常工作。这是我的代码

public void onFailure(Call<List<MoviesCategory>> call, Throwable t) {
            tv_no_cat.setVisibility(View.VISIBLE); ////This does not work
            Boolean x = tv_no_cat.getVisibility() == View.VISIBLE;

            Toast.makeText(getContext(), "Network Error "+x, Toast.LENGTH_LONG).show();    //This shows true
            tv_no_cat.setTextColor(Color.BLUE);
            videoLoadingPb.setVisibility(View.GONE); //This works
        }

我的猜测是我试图设置来自另一个线程的UI线程上的textview。如果是这样,为什么它适用于ContentLoadingProgressBar

这是我的2个视图的xml

<android.support.v4.widget.ContentLoadingProgressBar
        android:id="@+id/loading_categories"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:visibility="visible" />
    <TextView
        android:layout_below="@id/loading_categories"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="No Movie Category Found"
        android:id="@+id/tv_no_cat"
        android:textAlignment="center"
        android:layout_gravity="bottom"
        android:visibility="gone"
        />

欢迎任何有关如何将textview可见性设置为VISIBLE的帮助。

2 个答案:

答案 0 :(得分:1)

来自docs

  

在Android上,回调将在主线程上执行......

所以这不是你的问题,我怀疑它与Retrofit有关,特别是当它适用于另一个视图时。请确保您的xml设计没有问题,并且没有其他方法会影响此视图的可见性。

答案 1 :(得分:0)

在Oncreate或其他地方注册Textview? 这段代码是你在片段活动中使用的吗?

请检查一下......

tv_no_cat =(TextView)findViewById(R.id.tv_no_cat);(内部活动)

tv_no_cat =(TextView)rootView.findViewById(R.id.tv_no_cat);(Inside Fragment)