android - ListView 不刷新 fragment 与 viewpager 选项卡

标签 android listview tabs android-viewpager fragment

在 jakewharton 的 Android-ViewPagerIndicator...github 示例中给出的 viewpager 样式选项卡内的 fragment 与 listview 一起使用时,我遇到了问题。

我对三个选项卡使用相同的库,每个选项卡都有一个 ListView ,并且为那里的适配器设置了相同的数组列表。

我正在使用 3 这种 fragment 都工作正常,但因为我希望当我对其中任何一个 fragment 进行更改时我的列表在所有其他 fragment 中更新,它没有反射(reflect)这些变化。 我想如果我在三个选项卡中的任何一个列表中选中一个复选框(我正在更新 db 和我的数组列表中的值),那么它们各自 fragment 中的其他两个 ListView 应该反射(reflect)更改,请帮助我解决这个问题。 请帮助我,任何帮助将不胜感激

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

:->我调用这些 fragment 的主要 Activity 是

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_height="wrap_content"
    android:layout_width="fill_parent"
    />
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/indicator"
    >
    </android.support.v4.view.ViewPager>

请告诉我如何在更改任何 fragment ListView 时通知其他 fragment ListView 。

最佳答案

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

else 
{
 wrapper = (Wrapper) view.getTag();
}

wrapper.txtText.setText("Refreshed");

return view;
}

关于android - ListView 不刷新 fragment 与 viewpager 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314600/

相关文章:

android - 使用 BaseAdapter 复制项目自定义 ListView

javascript - 我使用什么技术将文本放入每个单独的选项卡?

android - 如何按权限搜索applicationinfo?

android - 在Android中,File.renameTo会覆盖目标文件吗?

android - 自定义 listView 按随机顺序显示较少的项目

javascript - 如何使用extjs在Widget中实现Tab面板?

html - TABBED 内容没有出现在 CSS 中

Android 使用 ArrayList 向多个联系人发送短信

java - Android Studio : How can I load url in WebView on fragment by clicking a button on the same fragment

c# - 使用 UWP 通过拖放重新排序可绑定(bind) ListView