我试图找出解决Android以下问题的最佳方法。
我有来自问题对象数组形式的内容提供者的数据。Question 对象有一些文本和一个 id。每个问题有 4 个答案,这些答案将在 QuestionResponse 对象中发送回其余服务器。
我希望在视图中一次显示一个问题(用户阅读问题,选择答案,然后点击“下一个”,移动到新屏幕上的下一个问题)但我需要以相同的方式执行此操作正如 ListView 在注册内容观察者方面所做的那样(因为问题可能会在服务器上发生变化,而服务器又会在内容提供者中更新它们。)存储在内容提供者中的数据的变化应该会在它们发生时更新屏幕上的问题.
我想我需要的是一个类似于 SimpleCursorAdaptor 的东西,但不是视图是列表视图,而是视图是光标指向的行之一的全屏表示。我试过制作自己的适配器,但我对下一步要去哪里有点卡住了。这是我的适配器....
public class QuestionAdapter implements Adapter {
public ArrayList<Question> questions = new ArrayList<Question>();
private Context context ;
public QuestionAdapter(ArrayList<Question> questions, Context context)
{
this.questions.clear();
this.questions.addAll(questions);
this.context = context;
}
public void updateQuestions(ArrayList<Question> questions)
{
questions.clear();
questions.addAll(questions);
}
@Override
public int getCount() {
return questions.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return questions.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return Long.parseLong(questions.get(arg0).get_id());
}
@Override
public int getItemViewType(int arg0) {
// TODO Auto-generated method stub
return IGNORE_ITEM_VIEW_TYPE;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View questionView = inflater.inflate(R.layout.question, parent);
return questionView;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return questions.isEmpty();
}
@Override
public void registerDataSetObserver(DataSetObserver arg0) {
// TODO Auto-generated method stub
}
@Override
public void unregisterDataSetObserver(DataSetObserver arg0) {
// TODO Auto-generated method stub
}
}
这是我的观点 question.xml。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/questionText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_weight="0.27"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ToggleButton
android:id="@+id/passButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Pass"
android:textOff="Pass" />
<ToggleButton
android:id="@+id/advisoryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Advisory"
android:textOff="Advisory" />
<ToggleButton
android:id="@+id/defectButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Defect"
android:textOff="Defect"/>
<ToggleButton
android:id="@+id/naButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="N/A"
android:textOff="N/A" />
</TableRow>
</TableLayout>
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Next..." />
</LinearLayout>