안드로이드에서 다음과 같은 문제에 접근하는 최선의 방법을 찾으려고 노력 중입니다.안드로이드 - 어댑터 백업 데이터가있는 마법사 유형 활동
콘텐츠 공급자로부터 데이터가 Question 개체의 배열 형식으로 제공됩니다. Question 객체에는 텍스트와 ID가 있습니다. 각 질문에는 4 개의 답변이 있으며, 나머지는 QuestionResponse 개체의 나머지 서버로 보내집니다.
ID는보기에서 한 번에 하나씩 표시됩니다 (사용자가 질문을 읽고 답변을 선택한 다음 "다음"을 누르면 새 질문의 다음 질문으로 이동합니다).하지만이 작업을 수행해야합니다. 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
}
}
그리고 내 view.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>
ListView.getCount()를 변경하는 것에 대해 잘 모르겠습니다. 얼마나 많은 행을 표시할지 결정하지 않습니다 .... ?? 그것은 단지 당신에게 어댑터가 얼마나 많은 행을 가지고 있는지를 알려줍니다. – GPGVM
나는 getCount (...)는 데이터 집합에있는 항목 수를 나타내며 전달시 전달해야 할 행/항목의 수를 어댑터에 나타냅니다. getCount (...) 결과를 1로 설정하면 데이터 세트에 하나의 값/행/항목 만 있다고 생각하기 때문에 하나의 행을 그리려고합니다. 나는 이것을 직접 시험해야 할 것이다. 나는 아주 잘못 될 수있다, 나는 단지 어댑터가 내부적으로 getCount (...)를 사용하여 getView (...)를 호출하는 횟수를 결정할 것이라고 생각했다. – Gophermofur
예. 내가 사용하는 SimpleAdapter를 확장 한 다음 GetCount를 반환하여 1을 반환합니다. 매력처럼 작동합니다. 몇 가지 이유로 지금 내 행이 전체 화면을 채우지 못하는 이유를 찾아야합니다. – GPGVM