Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于自己的类的ListView_Java_Android_Listview_Android Listview - Fatal编程技术网

Java 基于自己的类的ListView

Java 基于自己的类的ListView,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我是android开发新手,所以我对动态列表有问题 我有一个习惯类和HabitMemoryDao类,我想在主类中创建一个ListView 习惯。 是否有人编写了主类,其中Listview将显示所有习惯。 谢谢 公共课堂习惯{ 私有字符串名称; 私人日期开始日期; 私有整数持续时间; 私有int frequencyInWeek;//从1到7 私有字符串awardText; 公共字符串getName(){ 返回名称; } 公共void集合名(字符串名){ this.name=名称; } 公共日期ge

我是android开发新手,所以我对动态列表有问题

我有一个习惯类和HabitMemoryDao类,我想在主类中创建一个ListView 习惯。 是否有人编写了主类,其中Listview将显示所有习惯。 谢谢

公共课堂习惯{
私有字符串名称;
私人日期开始日期;
私有整数持续时间;
私有int frequencyInWeek;//从1到7
私有字符串awardText;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共日期getStartDate(){
返回起始日期;
}
公共作废设置开始日期(日期开始日期){
this.startDate=startDate;
}
public int getDuration(){
返回时间;
}
公共void setDuration(int duration){
这个。持续时间=持续时间;
}
公共整数getFrequencyInWeek(){
每周返回频率;
}
公共无效设置频率每周(整数频率){
this.frequencyInWeek=频率;
}
公共字符串getAward(){
返回awardText;
}
公众奖(字符串奖){
this.awardText=奖励;
}
}
公共类HabitMemoryDao{
private List habitList=new LinkedList();
公共HabitMemoryDao(){
习惯习惯1=新习惯();
habit1.setName(“正在运行”);
习惯1.设定持续时间(30);
habit1.每周设置频率(2);
habit1.setStartDate(新日期());
habitList.add(habit1);
习惯习惯2=新习惯();
习惯2.设置名称(“游泳”);
习惯2.设定持续时间(15);
习惯2.每周设置频率(7);
habit2.setStartDate(新日期());
habitList.add(habit2);
}
公共列表getHabitList(){
返回习惯列表;
}

您需要了解ListView和适配器如何相互配合:

所以有两种方法可以开始:您可以使用ArrayAdapter,它使用习惯类的toString()方法在ListView中显示习惯列表,或者使用功能更强大的类BaseAdapter。我建议您了解BaseAdapter的工作原理,因为ArrayAdapter是BaseAdapter的子类

顺便说一句:找给你写具体代码的人不是个好主意。欢迎你问一些关于具体问题的问题,人们会回答你(大多数时候是用代码片段)。

首先在你的
习惯
类中添加
toString()
方法

    public class Habit{
    ...

    public String toString()
    {
      return getName()+" "+getStartDate()+" "+getDuration()+" "+getFrequencyInWeek()+" "+getAward();
    }
    ...
}
然后在您的
main活动中
看看这个基本的
ListView
教程,您将了解它。
最好的方法是创建自己的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;
}

您的习惯类需要一个toString函数,该函数将用于显示对象内容,然后您可以迭代地将习惯对象添加到列表视图模型中。。。。
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 myList = (ListView) findViewById(R.id.myList);
HabitAdapter ha = new HabitAdapter(this, R.layout.row_layout_for_one_habit, HabitMemoryDao.getHabitList());
myList.setAdapter(ha);