Android 单击时文本视图和图像视图不更改

Android 单击时文本视图和图像视图不更改,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,我有一个活动,其中有三个片段放在一个ViewPager中。在前两个片段中,我有一个下拉列表,有点像一个动画ExpandableListView,但它是一个简单的RelativeLayout,包含一个TextView和ImageView,当按下该按钮时,会向下滑动包含一些元素的线性布局。单击RelativeLayout后,将执行以下操作: 更改单击的RelativeLayout的背景色(每次适用于每个片段中的每个布局) 在TextView中更改文本的颜色(每次都适用于我将在下面解释的第一个元素)

我有一个活动,其中有三个片段放在一个ViewPager中。在前两个片段中,我有一个下拉列表,有点像一个动画ExpandableListView,但它是一个简单的RelativeLayout,包含一个TextView和ImageView,当按下该按钮时,会向下滑动包含一些元素的线性布局。单击RelativeLayout后,将执行以下操作:

  • 更改单击的RelativeLayout的背景色(每次适用于每个片段中的每个布局)
  • 在TextView中更改文本的颜色(每次都适用于我将在下面解释的第一个元素)
  • 设置图像动画,一个用于更改颜色和旋转的箭头(除第一个元素外也适用)
  • 问题如下: 第一个片段只包含一个列表(显示或隐藏LinearLayout的RelativeLayout),它可以很好地处理背景、文本颜色和图像更改,图像旋转,LinearLayout相应地上下滑动。第二个片段包含4个这样的分组(RelativeLayout控制LinearLayout),第一次显示该片段时,似乎只有第一个分组起作用。其他三个改变背景并滑动线性布局,但据我所知,它保持相同的颜色和相同的图像(有两种颜色,一种是白色,一种是橙色,由于背景从橙色变为白色,我假设文本保持白色而不是变为橙色,图像也是如此)。

    笑点: 当我离开它几秒钟并再次单击它时,它工作正常,一切都会相应地改变,例如,如果我翻转到第三个片段并返回到第二个片段,它就会工作。另一方面,如果我启动应用程序,进入第二个片段,回到第一个片段,再回到第二个片段,它就不工作了。

    我不知道这是否与GC和回收视图或其他方面有关。

    XML:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:id="@+id/nutritionList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
    
            <RelativeLayout
                android:id="@+id/aboutWetFood"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="1dp"
                android:clickable="false"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:id="@+id/wetSub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="60dp"
                    android:orientation="vertical"
                    android:visibility="gone" >
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView04"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/textView1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
                </LinearLayout>
    
                <RelativeLayout
                    android:id="@+id/wetLayout"
                    android:layout_width="match_parent"
                    android:layout_height="60dp"
                    android:background="@color/my_yellow"
                    android:clickable="true"
                    android:onClick="openNutrition"
                    android:tag="wet" >
    
                    <TextView
                        android:id="@+id/wetTitle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="30dp"
                        android:text="@string/wet_food"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="@color/white" />
    
                    <ImageView
                        android:id="@+id/wetArrow"
                        android:layout_width="12dp"
                        android:layout_height="20dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="30dp"
                        android:src="@drawable/arrow_right_white" />
                </RelativeLayout>
    
            </RelativeLayout>
    
            <RelativeLayout
                android:id="@+id/aboutDryFood"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="1dp"
                android:clickable="false"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:id="@+id/drySub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="60dp"
                    android:orientation="vertical"
                    android:visibility="gone" >
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView06"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView05"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
                </LinearLayout>
    
                <RelativeLayout
                    android:id="@+id/dryLayout"
                    android:layout_width="match_parent"
                    android:layout_height="60dp"
                    android:background="@color/my_yellow"
                    android:clickable="true"
                    android:onClick="openNutrition"
                    android:tag="dry" >
    
                    <TextView
                        android:id="@+id/dryTitle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="30dp"
                        android:text="@string/dry_food"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="@color/white" />
    
                    <ImageView
                        android:id="@+id/dryArrow"
                        android:layout_width="12dp"
                        android:layout_height="20dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="30dp"
                        android:src="@drawable/arrow_right_white" />
                </RelativeLayout>
    
            </RelativeLayout>
    
            <RelativeLayout
                android:id="@+id/whyMixedFeeding"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="1dp"
                android:clickable="false"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:id="@+id/mixedSub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="60dp"
                    android:orientation="vertical"
                    android:visibility="gone" >
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView08"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView07"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
                </LinearLayout>
    
                <RelativeLayout
                    android:id="@+id/mixedLayout"
                    android:layout_width="match_parent"
                    android:layout_height="60dp"
                    android:background="@color/my_yellow"
                    android:clickable="true"
                    android:onClick="openNutrition"
                    android:tag="mixed" >
    
                    <TextView
                        android:id="@+id/mixedTitle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="30dp"
                        android:text="@string/mixed_feeding"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="@color/white" />
    
                    <ImageView
                        android:id="@+id/mixedArrow"
                        android:layout_width="12dp"
                        android:layout_height="20dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="30dp"
                        android:src="@drawable/arrow_right_white" />
                </RelativeLayout>
            </RelativeLayout>
    
            <RelativeLayout
                android:id="@+id/nutritionOralCare"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="1dp"
                android:clickable="false"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:id="@+id/oralSub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="60dp"
                    android:orientation="vertical"
                    android:visibility="gone" >
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView09"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="60dp"
                        android:layout_marginBottom="1dp"
                        android:background="#EDEDED" >
    
                        <TextView
                            android:id="@+id/TextView10"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="30dp"
                            android:text="SUB MENU 1"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:textColor="@color/my_yellow" />
                    </RelativeLayout>
                </LinearLayout>
    
                <RelativeLayout
                    android:id="@+id/oralLayout"
                    android:layout_width="match_parent"
                    android:layout_height="60dp"
                    android:background="@color/my_yellow"
                    android:clickable="true"
                    android:onClick="openNutrition"
                    android:tag="oral" >
    
                    <TextView
                        android:id="@+id/oralTitle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="30dp"
                        android:text="@string/oral_care_caps"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="@color/white" />
    
                    <ImageView
                        android:id="@+id/oralArrow"
                        android:layout_width="12dp"
                        android:layout_height="20dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="30dp"
                        android:src="@drawable/arrow_right_white" />
                </RelativeLayout>
    
            </RelativeLayout>
        </LinearLayout>
    
    </ScrollView>
    
    public void openNutrition(View view) {
            String viewTag = view.getTag().toString();
            if (viewTag.equals("wet")) {
                nutrition = (RelativeLayout) findViewById(R.id.wetLayout);
                nutritionSub = (LinearLayout) findViewById(R.id.wetSub);
                nutritionTitle = (TextView) findViewById(R.id.wetTitle);
                nutritionArrow = (ImageView) findViewById(R.id.wetArrow);
                animate();
    
            } 
    
            else if (viewTag.equals("dry")) {
                nutrition = (RelativeLayout) findViewById(R.id.dryLayout);
                nutritionSub = (LinearLayout) findViewById(R.id.drySub);
                nutritionTitle = (TextView) findViewById(R.id.dryTitle);
                nutritionArrow = (ImageView) findViewById(R.id.dryArrow);
                animate();
            }
    
            else if (viewTag.equals("mixed")) {
                nutrition = (RelativeLayout) findViewById(R.id.mixedLayout);
                nutritionSub = (LinearLayout) findViewById(R.id.mixedSub);
                nutritionTitle = (TextView) findViewById(R.id.mixedTitle);
                nutritionArrow = (ImageView) findViewById(R.id.mixedArrow);
                animate();
    
            }
    
            else if (viewTag.equals("oral")) {
                nutrition = (RelativeLayout) findViewById(R.id.oralLayout);
                nutritionSub = (LinearLayout) findViewById(R.id.oralSub);
                nutritionTitle = (TextView) findViewById(R.id.oralTitle);
                nutritionArrow = (ImageView) findViewById(R.id.oralArrow);
                animate();
    
            }
    
            else if (viewTag.equals("changeMix")) {
                nutrition = (RelativeLayout) findViewById(R.id.changeMixLayout);
                nutritionSub = (LinearLayout) findViewById(R.id.foodTypeLayout);
                nutritionTitle = (TextView) findViewById(R.id.changeMixText);
                nutritionArrow = (ImageView) findViewById(R.id.changeMixArrow);
                animate();
            }
        }
    
        private void animate() {
            if (nutritionSub.getVisibility() == View.GONE) {
                nutritionSub.setVisibility(View.VISIBLE);
                nutrition.setBackgroundColor(getResources().getColor(R.color.white));
                nutritionTitle.setTextColor(getResources().getColor(
                        R.color.my_yellow));
                nutritionArrow.setImageDrawable(getResources().getDrawable(
                        R.drawable.arrow_right_orange));
                r = new RotateAnimation(currentPos, degrees,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);
                /* Setting arrow animation properties */
                setArrowAnimation();
    
                Animation slideDown = AnimationUtils.loadAnimation(
                        getApplicationContext(), R.anim.slide_down);
                nutritionArrow.startAnimation(r);
                nutritionSub.startAnimation(slideDown);
            } else {
                nutrition.setBackgroundColor(getResources().getColor(
                        R.color.my_yellow));
                nutritionTitle.setTextColor(getResources().getColor(R.color.white));
                nutritionArrow.setImageDrawable(getResources().getDrawable(
                        R.drawable.arrow_right_white));
                r = new RotateAnimation(degrees, currentPos,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);
                /* Setting arrow animation properties */
                setArrowAnimation();
    
                Animation slideUp = AnimationUtils.loadAnimation(
                        getApplicationContext(), R.anim.slide_up);
                slideUp.setAnimationListener(new AnimationListener() {
    
                    @Override
                    public void onAnimationStart(Animation animation) {
    
                    }
    
                    @Override
                    public void onAnimationEnd(Animation animation) {
                        nutritionSub.setVisibility(View.GONE);
    
                    }
    
                    @Override
                    public void onAnimationRepeat(Animation animation) {
    
                    }
                });
                nutritionArrow.startAnimation(r);
                nutritionSub.startAnimation(slideUp);
            }
        }
    
        private void setArrowAnimation() {
            r.setInterpolator(new LinearInterpolator());
            r.setDuration(500);
            r.setFillEnabled(true);
            r.setFillAfter(true);
        }
    

    nutrition
    nutritionSub
    nutritionTitle
    nutritionArrow
    被声明为全局私有变量

    更新

    在扩展了
    fragment
    的my fragment类和
    OnPageChangeListener
    的方法
    onPageSelected()
    上运行日志,表明标记设置正确且可见。这个问题似乎与片段的生命周期有关,因为文本和图像的更改只有在我翻阅所有三个片段,然后返回到第二个片段时才会发生

    设置寻呼机:

    List<Fragment> fragments = getFragments();
    pageAdapter = new NutritionPageAdapter(getSupportFragmentManager(),
        fragments);
    ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
    pager.setAdapter(pageAdapter);
    

    我的
    片段

    public static final String FRAGMENT_TITLE = "FRAGMENT_TITLE";
        private View v;
    
        public static final NutritionFragment newInstance(String string) {
            NutritionFragment f = new NutritionFragment();
            Bundle b = new Bundle(1);
            b.putString(FRAGMENT_TITLE, string);
            f.setArguments(b);
    
            return f;
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            String screen = getArguments().getString(FRAGMENT_TITLE);
            if (screen.equals("Menu")) {
                v = inflater.inflate(R.layout.nutrition_menu_activity_layout,
                        container, false);
            } else if (screen.equals("Transition")) {
                v = inflater.inflate(R.layout.nutrition_transition_activity_layout,
                        container, false);
            } else {
                v = inflater.inflate(R.layout.nutrition_nutrition_activity_layout,
                        container, false);
            }
    
            return v;
    
        }
    

    尝试运行日志或调试断点以检查您的viewTag是否按预期设置?@zgc7009我运行了一个日志,当第二个布局膨胀时,标记是否按预期设置。我试图通过使用ID绕过所有标记,但错误仍然存在。
    public static final String FRAGMENT_TITLE = "FRAGMENT_TITLE";
        private View v;
    
        public static final NutritionFragment newInstance(String string) {
            NutritionFragment f = new NutritionFragment();
            Bundle b = new Bundle(1);
            b.putString(FRAGMENT_TITLE, string);
            f.setArguments(b);
    
            return f;
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            String screen = getArguments().getString(FRAGMENT_TITLE);
            if (screen.equals("Menu")) {
                v = inflater.inflate(R.layout.nutrition_menu_activity_layout,
                        container, false);
            } else if (screen.equals("Transition")) {
                v = inflater.inflate(R.layout.nutrition_transition_activity_layout,
                        container, false);
            } else {
                v = inflater.inflate(R.layout.nutrition_nutrition_activity_layout,
                        container, false);
            }
    
            return v;
    
        }