listview 没有在带有 viewpager 选项卡的片段中刷新

Posted

技术标签:

【中文标题】listview 没有在带有 viewpager 选项卡的片段中刷新【英文标题】:listview not refreshing in fragment with viewpager tabs 【发布时间】:2012-09-01 03:07:48 【问题描述】:

我陷入了与 jakewharton 的 android-ViewPagerIndicator 中给出的 viewpager 样式选项卡中的片段一起使用的 listview 问题... github 上的示例。

我对三个选项卡使用相同的库,每个选项卡都有一个列表视图,其中设置了相同的 arraylist 到那里的适配器。

我正在使用 3 个这种片段,它们都工作正常,但是当我对其中任何一个片段进行更改时,我希望在所有其他片段中更新我的列表,它没有反映更改。 我想如果我在三个选项卡中的任何一个列表中选中了一个复选框(我正在更新 db 和我的数组列表中的值),它们各自片段中的其他两个列表视图应该反映更改,请帮助我。 请帮助我,任何帮助将不胜感激

class RingFragment extends Fragment

 public static RingFragment newInstance(Context c, ArrayList<Ringtones> ringList) 
 
  RingFragment fragment = new RingFragment();
  cCntxt = c;
  return fragment;
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle        
savedInstanceState)
 
  rngAdapter = new RingAdapter(cCntxt, ringFragList);
  lstRingtones = new ListView(cCntxt);
  lstRingtones.setLayoutParams(new    LayoutParams(LayoutParams.FILL_PARENT, 
  LayoutParams.FILL_PARENT));
  lstRingtones.setAdapter(rngAdapter);
  LinearLayout layout = new LinearLayout(getActivity());
  layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,  
  LayoutParams.FILL_PARENT));
  layout.setGravity(Gravity.CENTER);
  layout.addView(lstRingtones);
  return layout;
 
 public class RingAdapter extends BaseAdapter
 
    ArrayList<Ringtones> arlstRingAdpter;
    Context adptrContext;
    public boolean noRing = false;
    public RingAdapter(Context c, ArrayList<Ringtones> adptrRngtones)
    
        arlstRingAdpter = adptrRngtones;
        adptrContext = c;
           
   @Override
public int getCount() 

  return arlstRingAdpter.size();

@Override
public Object getItem(int position) 

 return position;

@Override
public long getItemId(int position) 

 return position;

@Override
public View getView(int position, View convertView, ViewGroup parent) 

 View view = convertView;
 final Wrapper wrapper;
     if (view == null) 
 
     view = (RelativeLayout)LayoutInflater.from(cCntxt).inflate(R.layout.cell_ringtone,     
      null);
 wrapper = new Wrapper(view);
 view.setTag(wrapper);

else 

 wrapper = (Wrapper) view.getTag();

 return view;

   
 
 

:->我调用这些片段的主要活动是

public class MainActivity extends FragmentActivity
 
   ViewPager mPager;
   PageIndicator mIndicator;
MusicAdapter mAdapter;
RingtonesBL rngBL;
  @Override
  public void onCreate(Bundle savedInstanceState) 
  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mAdapter = new MusicAdapter(getSupportFragmentManager());
    mPager = (ViewPager)findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);
    mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
  
class MusicAdapter extends RingtoneFragmentAdapter 

 public MusicAdapter(FragmentManager fm) 
 
  super(fm);
  
 @Override
 public Fragment getItem(int position) 
 
 if(position % CONTENT.length == 0)
 
  return             
  RingFragment.newInstance(AppConstants.cAppContext,AppConstants.arlst_RingAll);
 
 else if(position % CONTENT.length == 1)
 
  return RingFragment1.newInstance(AppConstants.cAppContext, 
  AppConstants.arlst_RingCart);
 
 else
 
  return RingFragment2.newInstance(AppConstants.cAppContext, 
  AppConstants.arlst_RingPurchased);
 
 
 public int getItemPosition(Object object) 
 
  return POSITION_NONE;
 
 @Override
 public int getCount() 
 
   return CONTENT.length;
 
  @Override
  public CharSequence getPageTitle(int position) 
  
    return CONTENT[position % CONTENT.length].toUpperCase();
  
 

activity_main.xml 只有

 <com.ringtone.TabPageIndicator
    android:id="@+id/indicator"
    android:layout_
    android:layout_
    />
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_
    android:layout_
    android:layout_below="@+id/indicator"
    >
    </android.support.v4.view.ViewPager>

请告诉我如何在更改任何一个片段时通知其他片段列表视图。

【问题讨论】:

有人做过这种事吗?请帮助我。在到处搜索之后我来到了 ***。 我也遇到了同样的问题。你解决了吗? 就我而言,这是更新列表视图源的问题。在运行时它没有更新,我认为它正在更新,以找出您可以使用调试器的问题。 嗨,skygeek,我确实发现了这个问题。我已经解决了,我正在使用广播接收器来更新源。 @AkshayTaru 太棒了! 【参考方案1】:

请尝试在这个分支之外做一些事情: 例如:

else 

 wrapper = (Wrapper) view.getTag();


wrapper.txtText.setText("Refreshed");

return view;

【讨论】:

您可能应该编辑您的答案以从代码块中删除您的实际 cmets。

以上是关于listview 没有在带有 viewpager 选项卡的片段中刷新的主要内容,如果未能解决你的问题,请参考以下文章

带有 SlidingTabLayout 的 ViewPager 中的 Listview - 高度问题

带有ListView的Android ViewPager在调用notifyDatasetchanged时无法记住最后一个位置

Android ViewPager + 带有动态 ListViews 的片段

可滚动布局中的 ViewPager

求助scrollview嵌套viewpager 放listview 不能滑动

如何在另一个 Fragment 中更新 ListView?