2016-01-19 47 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。它會工作。