TextView和ImageView在点击时不会改变

时间:2014-05-09 16:23:50

标签: android android-viewpager fragment

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

  1. 更改所单击的RelativeLayout的背景颜色(每次对每个片段中的每个布局都有效)
  2. 更改TextView中文本的颜色(每次都适用于我将在下面解释的第一个元素)
  3. 为图像设置动画,使用箭头更改颜色并旋转(也适用于第一个元素)
  4. 问题如下: 第一个片段只包含一个列表(显示或隐藏LinearLayout的RelativeLayout),它可以正常工作,背景,文本颜色和图像更改,图像旋转,Linearlayout相应地上下滑动。第二个片段包含4个这样的分组(RelativeLayout控制LinearLayout),并且在第一次显示该片段时,只有第一个分组似乎有效。其他三个改变背景并滑动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);
        }
    


    nutritionnutritionSubnutritionTitlenutritionArrow被声明为全局私有变量

    更新

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

    设置寻呼机:

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


    getFragments()

    private List<Fragment> getFragments() {
        List<Fragment> fList = new ArrayList<Fragment>();
    
        fList.add(NutritionFragment.newInstance("Menu"));
    
        fList.add(NutritionFragment.newInstance("Nutrition"));
    
        fList.add(NutritionFragment.newInstance("Transition"));
        return fList;
        }
    


    我的Fragment

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

0 个答案:

没有答案