Android TextView setText和setVisibility在片段中不工作

Android TextView setText和setVisibility在片段中不工作,android,android-asynctask,settext,Android,Android Asynctask,Settext,我有ControllerFragment,它有3个子片段。通过ViewPager在表格布局中提供子项。未发送的苹果和香蕉徽章计数是可计算的变量值unSendAppleCountTxtView和unSendAppleCountTxtView根据这些变量值进行更改 我的函数正在运行主线程 尝试过的方法: 我已控制空检查,textView不为空 setUnSendAppleCount函数在这些线程中执行(runOnUIThread、new Handler()、new Handler(Looper.ge

我有
ControllerFragment
,它有3个子片段。通过ViewPager在表格布局中提供子项。未发送的苹果和香蕉徽章计数是可计算的变量值<代码>unSendAppleCountTxtView和
unSendAppleCountTxtView
根据这些变量值进行更改

我的函数正在运行主线程

尝试过的方法:

  • 我已控制空检查,textView不为空
  • setUnSendAppleCount
    函数在这些线程中执行(runOnUIThread、new Handler()、new Handler(Looper.getMainLooper())
  • 我尝试了
    AsyncTask
    ,但也没有在
    postExecute
    中使用setView和setText
  • 最后,我浏览了所有相关的问题并尝试了
  • 所有的方法都不起作用。TextView为空值

    public class ControllerFragment extends Fragment {
    
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) {
    
            View rootView = inflater.inflate(R.layout.controller_fragment, viewGroup, false);
    
            tabs = ViewUtil.findById(rootView, R.id.tabs);
            viewPager = ViewUtil.findById(rootView, R.id.controllerViewPager);
    
            setFragments();
            setupViewPager(viewPager);
            tabs.setupWithViewPager(viewPager);
    
            setupTabIcons(viewGroup);
    
            return rootView;
          }
    
           private void setupTabIcons(ViewGroup viewGroup) {
    
            LinearLayout appleListTab = (LinearLayout) LayoutInflater.from(MyApplication.getContext()).inflate(R.layout.tab_title_text_and_badge, viewGroup, false);
            RelativeLayout pearListTab = (RelativeLayout) LayoutInflater.from(MyApplication.getContext()).inflate(R.layout.tab_title_text, viewGroup, false);
            LinearLayout bananaListTab = (LinearLayout) LayoutInflater.from(MyApplication.getContext()).inflate(R.layout.tab_title_text_and_badge, viewGroup, false);
    
            unSendAppleCountTxtView = appleListTab.findViewById(R.id.badgeView);
            unSendBananaCountTxtView = bananaListTab.findViewById(R.id.badgeView);
    
            TextView appleTextView = appleListTab.findViewById(R.id.textView);
            TextView pearTextView = pearListTab.findViewById(R.id.textView);
            TextView bananaTextView = bananaListTab.findViewById(R.id.textView);
    
            setUnSendAppleCount(2);  //....this function is not working
            setUnSendBananaCount(2); //.....this function is not working
    
            bananaTextView.setText(getString(R.string.bananas));
            tabs.getTabAt(0).setCustomView(bananaListTab);
    
            appleTextView.setText(getString(R.string.apples));
            tabs.getTabAt(1).setCustomView(appleListTab);
    
            pearTextView.setText(getString(R.string.pears));
            tabs.getTabAt(2).setCustomView(pearListTab);
        }
    
        private void setupViewPager(ViewPager viewPager) {
    
            TabsViewPagerAdapter adapter = new TabsViewPagerAdapter(getFragmentManager());
            adapter.addFrag(bananaFragment, getString(R.string.bananas));
            adapter.addFrag(appleFragment, getString(R.string.apples));
            adapter.addFrag(pearFragment, getString(R.string.pears));
            viewPager.setAdapter(adapter);
    
            viewPager.setCurrentItem(1);
        }
    
        private void setUnSendAppleCount(int unSendCount) {
    
            if (unSendAppleCountTxtView != null) {
    
             if (unSendCount > 0) {
    
             unSendAppleCountTxtView.setVisibility(View.VISIBLE);
             unSendAppleCountTxtView.setText(String.format(getMyLocale(), "%d", unSendCount));
    
             } else {
             unSendAppleCountTxtView.setVisibility(View.GONE);
             }
          }
       }
    }
    
    控制器\u片段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"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/tab_unpressed_color">
    
                <android.support.design.widget.TabLayout
                    android:id="@+id/tabs"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:tabGravity="fill"
                    app:tabMode="fixed"
                    app:tabSelectedTextColor="@color/white"
                    app:tabTextColor="@color/tabColor" />
    
            </FrameLayout>
    
        </android.support.design.widget.AppBarLayout>
    
        <android.support.v4.view.ViewPager
            android:id="@+id/controllerViewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/app_bar_layout" />
    
    </RelativeLayout>
    
    
    
    tab_title_text_和_badge.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:weightSum="2"
        android:orientation="horizontal"
        tools:background="@color/Black">
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:gravity="center"
            android:layout_gravity="center"
            android:maxLines="1"
            android:layout_weight="1.99"
            android:textColor="@color/white"
            android:textSize="@dimen/infoTitle"/>
    
        <TextView
            android:id="@+id/badgeView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start|center"
            android:layout_marginEnd="1dp"
            android:layout_marginRight="1dp"
            android:layout_weight="0.01"
            android:background="@drawable/tab_controller_badge"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="@dimen/miniTextSize"
            android:visibility="gone"
            tools:text="11"
            tools:visibility="visible" />
    
    </LinearLayout>
    
    
    

    请帮助我

    尝试设置可见性
    android:visibility=“visible”
    android:visibility=“visible”
    删除
    gone
    属性,然后删除TextView

    <TextView
        android:id="@+id/badgeView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|center"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_weight="0.01"
        android:background="@drawable/tab_controller_badge"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/miniTextSize"
        android:visibility="visible" //change here
        tools:text="11"
        tools:visibility="visible" />
    

    尝试设置可见性
    android:visibility=“visible”
    android:visibility=“visible”
    delete
    gone
    属性,然后删除TextView

    <TextView
        android:id="@+id/badgeView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|center"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_weight="0.01"
        android:background="@drawable/tab_controller_badge"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/miniTextSize"
        android:visibility="visible" //change here
        tools:text="11"
        tools:visibility="visible" />
    

    请改用
    android:text
    工具:text

  • 工具:text=“text”仅用于Android Studio布局预览(在运行应用程序时不可见)
  • android:text=“text”用于将文本设置为布局元素,在应用程序运行时可以看到

  • 请改用
    android:text
    工具:text

  • 工具:text=“text”仅用于Android Studio布局预览(在运行应用程序时不可见)
  • android:text=“text”用于将文本设置为布局元素,在应用程序运行时可以看到

  • 尝试使用下面的xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:weightSum="2"
        android:orientation="horizontal"
        android:background="@color/Black">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="center"
        android:layout_gravity="center"
        android:maxLines="1"
        android:layout_weight="1.99"
        android:textColor="@color/white"
        android:textSize="@dimen/infoTitle"/>
    
    <TextView
        android:id="@+id/badgeView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|center"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_weight="0.01"
        android:background="@drawable/tab_controller_badge"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/miniTextSize"
        android:text="11"/>
    </LinearLayout>
    
    
    

    希望有帮助

    尝试使用下面的xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:weightSum="2"
        android:orientation="horizontal"
        android:background="@color/Black">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="center"
        android:layout_gravity="center"
        android:maxLines="1"
        android:layout_weight="1.99"
        android:textColor="@color/white"
        android:textSize="@dimen/infoTitle"/>
    
    <TextView
        android:id="@+id/badgeView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|center"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_weight="0.01"
        android:background="@drawable/tab_controller_badge"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/miniTextSize"
        android:text="11"/>
    </LinearLayout>
    
    
    

    希望有帮助

    我猜是不同的线程问题。我已经尝试过将数据传递给片段的活动的eventBus,它解决了这个问题

      ControllerFragment(){
    
            @Override
            public void onStart() {
                super.onStart();
    
                if (!EventBus.getDefault().isRegistered(this)) EventBus.getDefault().register(this);
    
            }
    
        @Override
        public void onStop() {
            super.onStop();
            EventBus.getDefault().unregister(this);
        }
    
       @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
       public void onEventMain(ControllerEvent event) {
    
          if (event.getSelectedEventType() == ControllerEvent.tabControllerEventTypes.refreshCount.ordinal()) {
    
              setUnSendAppleCount(event.getAppleCount());
    
              }
          }
    }
    

    我猜是不同的线程问题。我已经尝试过将数据传递给片段的活动的eventBus,它解决了这个问题

      ControllerFragment(){
    
            @Override
            public void onStart() {
                super.onStart();
    
                if (!EventBus.getDefault().isRegistered(this)) EventBus.getDefault().register(this);
    
            }
    
        @Override
        public void onStop() {
            super.onStop();
            EventBus.getDefault().unregister(this);
        }
    
       @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
       public void onEventMain(ControllerEvent event) {
    
          if (event.getSelectedEventType() == ControllerEvent.tabControllerEventTypes.refreshCount.ordinal()) {
    
              setUnSendAppleCount(event.getAppleCount());
    
              }
          }
    }
    


    setText不工作
    显示错误值?日志中没有错误。textview是空的,可能是因为它为null,然后您什么也不做。。。删除空复选框读取关于可能未被查看为空或未被查看的帐户值
    setText不工作
    显示错误值?日志中无错误。textview是空的,可能是因为它为null,然后您什么也不做。。。删除空复选框当应用程序第一次打开时,读取一个可能未读的视图为空或未读帐户值未读帐户=0所以android:visibility=“gone”。我尝试了invisible,但仍然无法工作,抱歉:(@蜂胶尝试在else中设置块可见性属性invisible,就像else一样{unReadChatCountTxtView.setVisibility(View.invisible);}当应用程序第一次打开时unReadCount=0所以android:visibility=“Goe”。我尝试了invisible,但仍然无法工作,抱歉:(@propoLis尝试在else中设置块可见性attr invisible,就像else{unReadChatCountTxtView.setVisibility(View.invisible);}只有工具:文本提供预览布局,我删除了工具:文本与您想要的一样,但仍然不工作。您是否编辑了可见性?我看到有两个可见性提到了
    android:visibility
    tools:visibility
    。还可以更改
    tools:background
    中提到的布局的背景色,因为您的
    Textview
    颜色在白色背景上为白色仅工具:文本提供预览布局,我删除工具:文本如您所需,但仍不工作您是否编辑了可见性?我看到有两种可见性提到
    android:visibility
    tools:visibility
    。还要更改与
    tools:background
    一起提到的布局,因为您的
    Textview
    颜色在白色背景上是白色焦点另一件事不是工具:Dfocus另一件事不是工具:dacept回答并关闭问题,如果您找到了解决方案,其他人可以找到答案。如果我接受我的答案,stackoverflow写此警报:“您可以在17小时内接受您的答案”您的意思是什么?我没有明白您的意思。stackoverflow说欢迎….!好的。一旦接受了问题,帮助他人找到答案,这就是我告诉您的原因。快乐编码。!如果您找到解决方案,请接受答案并关闭问题,以便其他人可以找到答案。如果我接受我的答案,stackoverflow将写此警报:”你可以在17小时内接受你的答案“你的意思是什么?我没听懂你的意思。stackoverflow说欢迎….!好的。一旦接受了问题,帮助别人找到答案,这就是我告诉你的原因。快乐编码。!