2015-02-05 36 views
-1

我有一个问题,我无法解决它。我想创建投票应用程序。我创建了2个类: - 包含用户名,问题以及Choice的一个ArrayList的投票 - 选项包含选项及其ID。ListView的显示包含在另一个ListView中

我想在主页上显示不同选择的问题列表(ArrayList)。我设法显示这个列表,但是我对类Poll的ArrayList有问题,因为只有第一项显示,但我想显示所有选择列表。

POLL CLASS

public class Poll{ 
    String question; 
    String forename; 
    ArrayList<Choice> list_choices; 


    public String getQuestion() { 
     return question; 
    } 
    public void setQuestion(String question) { 
     this.question = question; 
    } 
    public String getForename() { 
     return forename; 
    } 
    public void setForename(String forename) { 
     this.forename = forename; 
    } 

    public ArrayList<Choice> getListChoice() { 
     return list_choices; 
    } 
    public void setListChoice(ArrayList<Choice> list_choices) { 
     this.list_choices = list_choices; 
    } 
} 

CHOICE CLASS

public class Choice { 
    int id; 
    String choice; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getChoice() { 
     return choice; 
    } 
    public void setChoice(String choice) { 
     this.choice = choice; 
    } 

} 

适配器轮询

public class CustomListAdapter extends BaseAdapter{ 
    ArrayList<Poll> listPolls; 
    LayoutInflater layoutInflater; 
    Context context; 

    public CustomListAdapter(Context context,ArrayList<Poll> listPolls) { 
     this.listPolls = listPolls; 
     this.context = context; 
     layoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return listPolls.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return listPolls.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return arg0; 
    } 

    @Override 
    public View getView(int arg0, View arg1, ViewGroup arg2) { 
     ViewHolder holder; 

     if (arg1==null) 
     { 
      arg1= layoutInflater.inflate(R.layout.row_list, null); 
      holder = new ViewHolder(); 
      holder.ForenameView = (TextView) arg1.findViewById(R.id.forename); 
      holder.QuestionView = (TextView) arg1.findViewById(R.id.question); 
      holder.ChoiceView = (ListView) arg1.findViewById(R.id.choice); 
       //tagguer notre objet pour pouvoir le récupérer à la prochaine mise à jour graphique. 
      arg1.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder) arg1.getTag(); 
     } 


     holder.ForenameView.setText(listPolls.get(arg0).getForename()); 
     holder.QuestionView.setText(listPolls.get(arg0).getQuestion()); 
     holder.ChoiceView.setAdapter(new CustomListChoiceAdapter(context, listPolls.get(arg0).getListChoice())); 
     return arg1; 
    } 

    static class ViewHolder { 
     TextView ForenameView; 
     TextView QuestionView; 
     ListView ChoiceView; 
    } 
} 

适配器选择

public class CustomListChoiceAdapter extends BaseAdapter { 
    ArrayList<Choice> listChoices; 
    LayoutInflater layoutInflater; 

    public CustomListChoiceAdapter(Context context,ArrayList<Choice> listChoices) { 
     this.listChoices = listChoices; 
     layoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return listChoices.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return listChoices.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return arg0; 
    } 

    @Override 
    public View getView(int arg0, View arg1, ViewGroup arg2) { 
     ViewHolder holder; 

     if (arg1==null) 
     { 
      arg1= layoutInflater.inflate(R.layout.row_list_choice, null); 
      holder = new ViewHolder(); 
      holder.ChoiceView = (TextView) arg1.findViewById(R.id.choice_text); 
      //holder.IdView = (TextView) arg1.findViewById(R.id.question); 
      //tagguer notre objet pour pouvoir le récupérer à la prochaine mise à jour graphique. 
      arg1.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder) arg1.getTag(); 
     } 
     holder.ChoiceView.setText(listChoices.get(arg0).getChoice()); 
     notifyDataSetChanged(); 
     //holder.IdView.setText(listChoices.get(arg0).getId()); 

     return arg1; 
    } 

    static class ViewHolder { 
     TextView ChoiceView; 
     //TextView IdView; 
    } 
} 

XML主页

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout 
     android:orientation="vertical" 
     android:id="@+id/LinearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp" 
     android:background="@drawable/customborder" 
     > 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:cacheColorHint="#000000" 
      > 
     </ListView> 

    </RelativeLayout> 
</LinearLayout> 

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" > 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 
      <TextView 
       android:id="@+id/forename" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="left" 
       android:text="Medium Text" 
       android:textColor="@color/blue" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <TextView 
       android:id="@+id/question" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/black" 
       android:text="TextView" /> 
      <ListView 
       android:id="@+id/choice" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:cacheColorHint="#000000" 
       > 
      </ListView> 
     </LinearLayout> 
</LinearLayout> 

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" > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 
     <TextView 
      android:id="@+id/choice_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:text="Medium Text" 
      android:textColor="@color/pink" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 
    </LinearLayout> 
</LinearLayout> 

活动,其显示的ArrayList

public class debug extends Activity { 
    ListView lv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.debugg); 
     //Récuperation de ListView crée 

     lv = (ListView) findViewById(R.id.listView1); 


     ArrayList<Choice> list_choice = new ArrayList<Choice>(); 
     Choice choix = new Choice(); 
     choix.setChoice("choix 1"); 
     list_choice.add(choix); 
     choix = new Choice(); 
     choix.setChoice("choix 2"); 
     list_choice.add(choix); 


     ArrayList<Poll> resultats = new ArrayList<Poll>(); 
     Poll newsData = new Poll(); 
     newsData.setListChoice(list_choice); 
     newsData.setForename("Paul"); 
     newsData.setQuestion("Question 1"); 
     resultats.add(newsData); 
     newsData = new Poll(); 
     newsData.setListChoice(list_choice); 
     newsData.setForename("Laetitia"); 
     newsData.setQuestion("Question 2"); 
     resultats.add(newsData); 
     lv.setAdapter(new CustomListAdapter(this, resultats)); 
    } 

} 
+0

英语在这里请。 – 2015-02-05 19:53:52

+0

您需要使用section,expandablelistadapter或更改设计。在listview中的listview不会工作。 – njzk2 2015-02-05 21:06:01

回答

0

人,一个和ORI杜松子酒的解决方案是:

设置你的父母ListView项目WRAP_CONTENT身高。接下来,设置您包含的ListView项目的固定高度。然后在getView()方法中设置你包含的高度ListView的高度等于parent_array_list.size() * child_list_view_item_height。这可能对你有所帮助。

代码示例:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (listPolls.size() * TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, child_list_view_item_height, displayMetrics))); 
holder.ChoiceView.setLayoutParams(params); 
+0

谢谢!它的工作:D – emilie 2015-02-05 21:54:44

相关问题