我只是在尝试遍历我用ViewPager创建的页面。每个页面都有一个文本视图,我需要获取其值。我可以获取当前片段,但我需要能够在 for 循环中指定页面,如下所示:
public void setEntryValues() {
int numPages = mAdapter.getCount();
JournalEntryFragment frag;
View view;
TextView txtView;
for(int i = 0; i < numPages; i++) {
frag = (JournalEntryFragment)mAdapter.instantiateItem(mPager,mPager.getCurrentItem());
//frag = (JournalEntryFragment)mAdapter.getItem(i); // Doesn't work, returns null for view
view = frag.getView();
txtView = (TextView)view.findViewById(R.id.scale);
int scale = Integer.valueOf(txtView.getText().toString());
Log.v("rx", "scale: " + scale);
if(i == 0) {
mEntry.setPain(scale);
} else if(i ==1) {
mEntry.setStress(scale);
} else {
mEntry.setSleep(scale);
}
Log.v("rx", mEntry.toString());
}
}
getCurrentItem() 工作正常,但仅适用于当前幻灯片。当我尝试 getItem() 时,我总是得到视图的 null。
/* 更新 - 这是我的碎片寻呼适配器 */
public class JournalPagerAdapter extends FragmentPagerAdapter {
public JournalPagerAdapter(FragmentManager mgr) {
super(mgr);
}
@Override
public int getCount() {
return(3);
}
@Override
public Fragment getItem(int position) {
return(JournalEntryFragment.newInstance(position));
}
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
}
我认为您正在尝试在滑动时从viewpager适配器中检索信息,并且您正在尝试通过循环来实例化项目。您可能会发现此解决方案与您要求的解决方案略有不同。但我还是要写它。
以下是编写寻呼机适配器的方法,
public class ViewPagerAdapter extends PagerAdapter {
Context context;
LayoutInflater inflater;
ArrayList<Item> itemsList = new ArrayList<Item>();
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
public ViewPagerAdapter(Context context, ArrayList<Item> items) {
this.context = context;
itemsList = items;
}
/**
* This method returns the number of views to be displayed.
*/
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TextView txtMessage;
TextView txtHeading;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewItem = inflater.inflate(R.layout.viewpagercontent, container, false);
txtHeading = (TextView) viewItem.findViewById(R.id.txtHeadline);
txtMessage = (TextView) viewItem.findViewById(R.id.txtMsg);
container.addView(viewItem);
return viewItem;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
}
如果要检索有关某个事件的信息(假设您正在 ViewPager 上滑动),则可以执行以下操作:
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int pPosition) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int pPosition, float pPositionOffset, int pPositionOffsetPixels) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int pState) {
// TODO Auto-generated method stub
}
});
}
希望对您有所帮助。