0
它是一個viewpager,其中包含具有特定問題答案的listview。Android Listview Inside viewpager始終顯示所有頁面中的最後一個viewpager頁面arraylist數據
Listview(Arraylist)已經逐頁顯示了所有數據,我已經通過PrintLn在logcat上進行了檢查。所以問題只在於,在所有viewpager頁面中,listview顯示viewpager所有頁面中的最後一頁答案(數據)。
我也試過holder.adapter.notifydatasetchanged();但它不工作。
這裏是下面我的代碼,
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View convertView = null;
convertView=inflater.inflate(resource, null);
holder=new ViewHolder();
holder.lvCaseAnswers = (ListView)convertView.findViewById(R.id.lvCaseAnswers);
holder.lvCaseAnswers.setTag(position);
holder.txtCaseChallengePostedBy=(TextView)convertView.findViewById(R.id.txtCaseChallengePostedBy);
holder.txtCaseChallengeQuestion = (TextView)convertView.findViewById(R.id.txtCaseChallengeQuestion);
holder.txtCaseChallengeCategory = (TextView)convertView.findViewById(R.id.txtCaseChallengeCategory);
holder.btnCaseChallengeSubmit=(Button)convertView.findViewById(R.id.btnCaseChallengeSubmit);
//btnCaseChallengeTry=(Button)convertView.findViewById(R.id.btnCaseChallengeTry);
//get data from list
System.out.println("que_id: "+listItems.get(position).getQue_id());
dbconn.open();
c=dbconn.getQuestionById(listItems.get(position).getQue_id());
if(c.moveToFirst())
{
//set data from database
Toast.makeText(context, "data:"+c.getString(0), 0).show();
holder.txtCaseChallengePostedBy.setText(" Posted By "+c.getString(2));
holder.txtCaseChallengeQuestion.setText(c.getString(4));
String category = c.getString(3);
category = category.substring(0,1).toUpperCase() + category.substring(1).toLowerCase();
holder.txtCaseChallengeCategory.setText(category);
holder.listanswers.add(c.getString(5));
holder.listanswers.add(c.getString(6));
holder.listanswers.add(c.getString(7));
holder.listanswers.add(c.getString(8));
holder.listanswers.add(c.getString(9));
System.out.println("list item name:"+holder.listanswers.get(0));
holder.adapter = new ArrayAdapter<String>(context, R.layout.raw_answers, holder.listanswers){
@Override
public View getView(int position,
View view, ViewGroup parent) {
// TODO Auto-generated method stub
Integer txtPosition = (Integer) parent.getTag();
LayoutInflater inflater=LayoutInflater.from(context);
view = inflater.inflate(R.layout.raw_answers, null);
TextView txt=(TextView)view.findViewById(R.id.txtRawAnswers);
CheckedTextView text = (CheckedTextView) view.findViewById(R.id.txtRawAnswers);
text.setText(holder.listanswers.get(position));
if(holder.listOptions.get(position).equals(holder.correct_ans))
{
text.setTextColor(Color.GREEN);
text.setCompoundDrawablesWithIntrinsicBounds(R.drawable.custom_radio_btn, 0, R.drawable.ic_true, 0);
}
else
{
text.setTextColor(Color.RED);
text.setCompoundDrawablesWithIntrinsicBounds(R.drawable.custom_radio_btn, 0, R.drawable.ic_false, 0);
}
return view;
}
};
holder.adapter.notifyDataSetChanged();
holder.lvCaseAnswers.setAdapter(holder.adapter);
holder.lvCaseAnswers.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Constants.setListViewHeightBasedOnChildren(holder.lvCaseAnswers);
holder.correct_ans=c.getString(10);
holder.answer=c.getString(11);
holder.txtCaseChallengeUserAnswer.setText(holder.answer);
for(int i=0;i<holder.listOptions.size();i++)
{
if(holder.listOptions.get(i).equals(holder.answer))
{
holder.lvCaseAnswers.setItemChecked(i, true);
}
else
{
holder.lvCaseAnswers.setItemChecked(i, false);
}
}
holder.lvCaseAnswers.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
holder.answer=holder.listOptions.get(position);
}
});
holder.adapter.notifyDataSetChanged();
holder.lvCaseAnswers.setEnabled(false);
holder.btnCaseChallengeSubmit.setVisibility(View.GONE);
}
dbconn.close();
// Add viewpager_item.xml to ViewPager
((ViewPager) container).addView(convertView);
return convertView;
}
您是否獲得viewpager的不同位置? –
是的......這就是爲什麼問題在每個頁面顯示正確 –