gpt4 book ai didi

android - ViewPager PagerAdapter 在方向改变时重置

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:53 25 4
gpt4 key购买 nike

我将 ViewPager 用于多项选择题考试应用程序,它会从一个更大的集合中随机选择 30 个问题。我在为 ViewPager 提供页面的 PageAdapter 中执行此操作。

问题是,当方向发生变化时,不仅寻呼机而且适配器都会重新加载 - 我知道如何保存当前寻呼机位置,但当适配器重置时,它还会从集合中选择新问题。处理此问题的正确方法是什么?

此外,附带问题 - 在 RadioGroups 上注册选项的最佳方式是什么?直接点击还是以其他方式?

我是 Android 应用开发的新手。


Activity :

public class MyActivity extends SherlockActivity {
ActionBar actionBar;
ViewPager pager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

pager = new ViewPager(this);
setContentView(pager);
QuestionsAdapter adapter = new QuestionsAdapter(this);
pager.setAdapter(adapter);

int position = 0;
if (savedInstanceState != null) {
position = savedInstanceState.getInt("Q_NUMBER");
}
pager.setCurrentItem(position);
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
int position = pager.getCurrentItem();
savedInstanceState.putInt("Q_NUMBER", position);
}
}

适配器:

class QuestionsAdapter extends PagerAdapter {
Context context;
QuestionsHelper dbQuestions;
boolean exam;
List<HashMap<String,Object>> examQuestions;

public QuestionsAdapter(Context context, boolean exam) {
this.context = context;
this.examQuestions = GetQuestionsFromDB(30);
}

public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view;
HashMap<String,Object> q;

view = inflater.inflate(R.layout.exam_question_layout, null);
q = getQuestion(position+1);

((TextView)view.findViewById(R.id.q_number)).setText(Integer.toString(position+1)+".");
((TextView)view.findViewById(R.id.q_question)).setText(q.get("question").toString());
((RadioButton)view.findViewById(R.id.q_answer_a)).setText(q.get("answer_a").toString());
((RadioButton)view.findViewById(R.id.q_answer_b)).setText(q.get("answer_b").toString());
((RadioButton)view.findViewById(R.id.q_answer_c)).setText(q.get("answer_c").toString());

((ViewPager)collection).addView(view, 0);
return view;
}
}

最佳答案

屏幕旋转会以新的方向重新绘制整个屏幕,我们可以通过覆盖配置更改来防止它。

在 Android Manifest 的屏幕声明下添加 android:configChanges="orientation|screenSize"

 android:configChanges="orientation|screenSize"

并在您的 Activity 中重写 onConfigurationChanged(Configuration)

 @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

关于android - ViewPager PagerAdapter 在方向改变时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com