2013-05-07 43 views
0

我已经创建了一个viewpager,它显示了3个相似的片段。这些片段具有相同的布局,并且这些布局中的视图具有相同的ID(例如:DetailedPowerFragment中的RatingBar具有id详细的评级条,并且DetailedWaterFragment中的RatingBar也是如此)三个片段的视图具有相同的ID导致奇怪的行为

但是,当我尝试设置RatingBar与findViewById分别在每个片段中似乎找到了不同的RatingBar。

所以

 final RatingBar ratingBar = (RatingBar)getSherlockActivity().findViewById(R.id.ratingBar); 
    ratingBar.setEnabled(false); 
在DetailedWaterFragment

,将设置在DetailedPowerFragment中的RatingBar。下面你会看到创建viewpager的代码,如果这是相关的 - 但是是什么导致了这个问题?我是否需要为我的所有观点提供一个新的ID以确保这不会发生?

detailedFragments = new ArrayList<SherlockFragment>(); 

    detailedFragments.add(new DetailedPowerFragment()); 
    detailedFragments.add(new DetailedHeatFragment()); 
    detailedFragments.add(new DetailedWaterFragment()); 

    mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), detailedFragments); 
    mViewPager.setAdapter(mMyFragmentPagerAdapter); 
+0

不确定要在这里明白,为什么你创建了3次相同的布局?为什么不创建只有一个和使用它的3个片段? – 2013-05-07 06:53:37

回答

1

当您使用getSherlockActivity().findViewById()它会返回第一个视图机智提供从整体视图层次的ID,所以它可以不是那些评级吧,你现在在屏幕上看到。

你可以创建3个不同的片段与一个不同的视图id,这将有所帮助。您也可以修改您的逻辑并调用方法来更改当前显示片段的评级栏。

祝你好运!

+0

谢谢。我不知道。但是,如果我只想改变评级栏而不是每次改变视图时?似乎每次显示新片段时都会调用方法来更改评级栏。 – CodePrimate 2013-05-07 07:33:53

+0

@litemode如果你想同步你的评级栏,可能你应该将其从ViewPager移出到父级的布局,并且只使用一个评级栏,而不是3个片段中的3个不同栏。我不知道你想创建什么布局,所以很难给你100%的解决方案。 – Evos 2013-05-07 11:06:30