2016-01-19 28 views
0

它是一个viewpager,其中包含具有特定问题答案的listview。Android Listview Inside viewpager始终显示所有页面中的最后一个viewpager页面arraylist数据

Listview(Arraylist)已经逐页显示了所有数据,我已经通过PrintLn在logcat上进行了检查。所以问题只在于,在所有viewpager页面中,listview显示viewpager所有页面中的最后一页答案(数据)。

我也试过holder.adapter.notifydatasetchanged();但它不工作。

Here is the screenshot of my screen, showing the Question and below is the list of answers

这里是下面我的代码,

@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; 
    } 
+0

您是否获得viewpager的不同位置? –

+1

是的......这就是为什么问题在每个页面显示正确 –

回答

1

你没在使用viewpager片段。使用带片段的viewpager。它会工作。