我有一个片段,其布局包括一些给定评级的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图像。