片段在恢复时会创建不同的RatingBars

时间:2014-05-09 21:12:02

标签: android android-fragments ratingbar

我有一个片段,其布局包括一些给定评级的RatingBars(动态设置)。在片段中,我可以单击某些区域,这会导致转换到另一个片段。我的问题是:当我传递给下面的片段,然后点击Back按钮返回到原来的片段时,我发现UI与之前的评级栏完全相同,后者现在的评级与最后一个相同在列表中(下面代码中的item2)!知道发生了什么事吗?这是原始的片段代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    scroller = new ScrollView(getActivity());
    ln = new LinearLayout(getActivity());
    ln.setOrientation(LinearLayout.VERTICAL);
    scroller.addView(ln);
    \\define items

    addItemLayout(item1, inflater, container);  
    addItemLayout(item2, inflater, container);  

    return scroller;        
}

private void addItemLayout(MyItem item, LayoutInflater inflater, ViewGroup container){

    View uiItem = inflater.inflate(R.layout.item, container,false);                         

    \\insert textviews...

    RatingBar ratingBar = (RatingBar) uiItem.findViewById(R.id.rating);
    ratingBar.setRating(item.getRating());
    View content = uiItem.findViewById(R.id.content);
    final MyItem itemToPass = item;

    content.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v){    
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            transaction.addToBackStack(null);
            transaction.replace(R.id.root_frame, NextFragment.newInstance(itemToPass));
            transaction.commit();
        }
    }); 
    ln.addView(uiItem);     
}

这是布局文件中的评级栏

<RatingBar
        android:id="@+id/rating"
        style="@style/myRatingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/upperlabel"
        android:layout_marginBottom="3dp"
        android:isIndicator="true"
        android:numStars="5"
        android:stepSize="1" />

因此第一个片段的布局在开始时完美地创建,然后在事务发生时被销毁,并且在点击后退按钮后重新创建它时,除了ratingbars之外它将被完美地重新创建!第一个onCreateView()的效果与第二次调用的同一个方法的效果有何不同?

编辑:这似乎与我使用自定义评级栏这一事实有关,因为对于标准评级栏,问题就会消失。这是我的评级栏的风格:

<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/ratingstars</item>
    <item name="android:minHeight">16dp</item>
    <item name="android:maxHeight">16dp</item>
</style>

这是ratingstars.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background"
      android:drawable="@drawable/emptyglass" />
<item android:id="@+android:id/secondaryProgress"
      android:drawable="@drawable/emptyglass" />
<item android:id="@+android:id/progress"
      android:drawable="@drawable/fullglass" />
</layer-list>

其中,空玻璃和全玻璃是两个png图像。

0 个答案:

没有答案