我必须清楚我正在寻找一个示例或答案,我可以在viewpager中使用各种不同的布局设计,并且所有页面中的数据都是动态的,所有页面都可以由用户进行交互。 /强>
我的用例和解决问题的当前方法:
所以我有8种不同类型的问题类型,因此我为所有这些类型创建了layouts
。此外,我必须通过已从sqlite DB获取数据的java Map
填充这些布局的视图中的数据。
但是测试可能包含25个问题,其中包含上述8个不同的布局。对于所有这25个问题,我想使用Viewpager
和Fragment
来返回基于的所需布局我的java地图中传递的问题类型值。
我对此的讨论:
我创建了一个活动,并使用viewpager布局对其进行了充气:
R.layout.practice_pager
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/test_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
* 活动编辑代码*
public class TestActivity extends FragmentData implements FragmentData{
FragmentManager manager=getSupportFragmentManager();
private ViewPager mViewPager;
private MyFragmentPagerAdapter mMyFragmentPagerAdapter;
int PAGE_COUNT = 0;
GrePracticeTestRecord p=new GrePracticeTestRecord();
private HashMap<Integer, GrePracticeResultRecord> mPracResultMap;
public static int fragmentToReturn=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.practice_pager);
mViewPager = (ViewPager) findViewById(R.id.test_container);
//This function is called to fetch the data from sqlite db and fill the map with data
LoadingTestView();
PAGE_COUNT=mPracRecordMap.size();
initPager();
}
//here I initialize the pager and set the adapter to it
public void initPager()
{
p.setQUES(mPracRecordMap.get(1).getQUES());
p.setEXPL(mPracRecordMap.get(1).getEXPL());
fragmentToReturn=Integer.parseInt(mPracRecordMap.get(1).getQTYPE());
setData(p);
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fList);
mViewPager.setAdapter(mMyFragmentPagerAdapter);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
mMyFragmentPagerAdapter.notifyDataSetChanged();
p.setQUES(mPracRecordMap.get(mViewPager.getCurrentItem()+1).getQUES());
p.setEXPL(mPracRecordMap.get(mViewPager.getCurrentItem()+1).getEXPL());
setData(p);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void setData(GrePracticeTestRecord p) {
// TODO Auto-generated method stub
}
@Override
public GrePracticeTestRecord getData() {
// TODO Auto-generated method stub
return p;
}
}
我的适配器编辑代码
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter{
private List<Fragment> fragments;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int position) {
System.out.println("value of position "+position);
return this.fragments.get(position);
}
/** Returns the number of pages */
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return MyFragmentPagerAdapter.POSITION_NONE;
}
}
接口FragmentData
public interface FragmentData {
public void setData(GrePracticeTestRecord p);
public GrePracticeTestRecord getData();
}
TestFragment已修改代码
公共类TestFragment扩展了Fragment {
AnswerEnterListener callBack;
FragmentData fD;
Button submitAnswer;
EditText userAnswer;
TextView qText,expl;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.qtype1, container, false);
}
public interface AnswerEnterListener
{
public void onInputAnswer(String ans);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
callBack=(AnswerEnterListener) activity;
fD=(FragmentData) activity;
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
qText=(TextView) getActivity().findViewById(R.id.question_text);
expl=(TextView)getActivity().findViewById(R.id.explanation_text);
qText.setText(Html.fromHtml(fD.getData().getQUES()));
expl.setText(Html.fromHtml(fD.getData().getEXPL()));
}
}
与TestFragment类似,我也没有其他片段。每个都是布局类型。
问题:
答案 0 :(得分:3)
我必须清楚,我正在寻找一个例子或答案 在viewpager和所有数据中使用各种不同的布局设计 页面将是动态的,所有页面都可以通过 用户。
这应该很容易制作,但你似乎已经很复杂了。你需要做这样的事情:
使用LoadingTestView()从数据库中获取数据;功能。
初始化ViewPager
并设置它的适配器。适配器将根据您拥有的任何条件在getItem()
方法中返回正确的片段实例。
在片段中,从活动中检索数据,该活动应通过某种方法公开数据。
我做了一个简单的例子,你可以找到here。