2013-07-23 29 views
0

即时通讯在Android开发新,所以我有动态列表的问题。ListView基于自己的类

我有一个习惯类和HabitMemoryDao类,我想在主类 与Habits的ListView。 有人可以写Listview将显示所有习惯的主要类。 感谢

public class Habit { 

    private String name; 
    private Date startDate; 
    private int duration; 
    private int frequencyInWeek; // from 1 to 7 
    private String awardText; 


    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Date getStartDate() { 
     return startDate; 
    } 

    public void setStartDate(Date startDate) { 
     this.startDate = startDate; 
    } 

    public int getDuration() { 
     return duration; 
    } 

    public void setDuration(int duration) { 
     this.duration = duration; 
    } 

    public int getFrequencyInWeek() { 
     return frequencyInWeek; 
    } 

    public void setFrequencyInWeek(int frequency) { 
     this.frequencyInWeek = frequency; 
    } 

    public String getAward() { 
     return awardText; 
    } 

    public void setAward(String award) { 
     this.awardText = award; 
    } 
} 

public class HabitMemoryDao { 

    private List<Habit> habitList = new LinkedList<Habit>(); 

    public HabitMemoryDao() { 
     Habit habit1 = new Habit(); 
     habit1.setName("Running"); 
     habit1.setDuration(30); 
     habit1.setFrequencyInWeek(2); 
     habit1.setStartDate(new Date()); 
     habitList.add(habit1); 

     Habit habit2 = new Habit(); 
     habit2.setName("Swimming"); 
     habit2.setDuration(15); 
     habit2.setFrequencyInWeek(7); 
     habit2.setStartDate(new Date()); 
     habitList.add(habit2); 
    } 


    public List<Habit> getHabitList() { 
     return habitList; 
    } 
+0

你的习惯类需要这将被用来显示对象内容的ToString函数,那么你添加的习惯反对迭代列表视图模型.... – WattoWatto

回答

0

你需要的是理解ListView和适配器如何与对方合作:

因此,有两种方法启动:您可以使用ArrayAdapter,使用的toString()方法你习惯类在ListView中显示习惯列表,或者使用功能更强大的类BaseAdapter。我建议你学习BaseAdapter是如何工作的,因为Array适配器是BaseAdapter的子类。 Simple tutorial for BaseAdapters

顺便说一句:这不是一个好主意,要求为你写一些具体代码的人。欢迎您提出有关具体问题的问题,并且人们会回答您(大部分时间都使用代码片段)。

+0

谢谢,下次我会定义具体的问题 – Dragan

0

首先在Habit类添加一个toString()方法

public class Habit{ 
    ... 

    public String toString() 
    { 
     return getName()+" "+getStartDate()+" "+getDuration()+" "+getFrequencyInWeek()+" "+getAward(); 
    } 
    ... 
} 

然后在MainActivity看看这个基本ListView教程,你要搞清楚。 http://www.vogella.com/articles/AndroidListView/

0

最好的方法是创建自己的ArrayAdapter。示例实现:

public class HabitAdapter extends ArrayAdapter<Habit> { 

private ArrayList<Habit> items; 
Activity activity; 

static class ViewHolder { 
    public TextView nameTv; 
    public TextView startDateTv; 
    public TextView awardTextTv; 

} 

public HabitAdapter(Activity activity, int textViewResourceId, 
     ArrayList<Habit> items) { 
    super(activity, textViewResourceId, items); 
    this.items = items; 
    this.activity = activity; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    if (rowView == null) { 
     LayoutInflater inflater = (LayoutInflater) activity 
       .getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.row_layout_for_one_habit, null); 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.nameTv = (TextView) rowView.findViewById(R.id.nameTv); 
     viewHolder.startDateTv = (TextView) rowView 
       .findViewById(R.id.startDateTv); 
     viewHolder.awardTextTv = (TextView) rowView 
       .findViewById(R.id.awardTextTv); 
     rowView.setTag(viewHolder); 
    } 

    ViewHolder holder = (ViewHolder) rowView.getTag(); 

    Habit habit = items.get(position); 

    holder.nameTv.setText(habit.getName()); 
    holder.startDateTv.setText(habit.getStartDate()); 
    holder.awardTextTv.setText(habit.getAwardText()); 

    return rowView; 
} 

}

您需要为ListView中的一行创建布局。基于我的实现,你应该有3个TextViews(nameTv,startDateTv,awardTextTv)。

您的活动

然后:

ListView myList = (ListView) findViewById(R.id.myList); 
HabitAdapter ha = new HabitAdapter(this, R.layout.row_layout_for_one_habit, HabitMemoryDao.getHabitList()); 
myList.setAdapter(ha); 
相关问题