Android的数据排序为数组 - ArrayAdapter JSON列表视图 [英] Android Sorting data into arrays - ArrayAdapter JSON Listview

查看:384
本文介绍了Android的数据排序为数组 - ArrayAdapter JSON列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个MySQL表称为包含饮食信息食品。我目前运行的PHP脚本调用从食品以下SQL命令选择*其中dietid = 1返回下面的图片。

列日是减肥的日子,所以1天,2天等的时间是指白天的一个点左右的时间1是早餐的时候2是点心时间3是午饭时间4日下午点心和时间5晚餐。

我想为diet.Description每天一个ListView显示在以下方式中的数据是做出来的数量测量和项目

我在登录猫此刻以下输出。

更新 - 编辑新建的logcat

使用吉姆的approact我一直能集团这一数据按日期和时间在但是,我需要现在我面临着我面临问题之前的格式,名单被充气,它把信息的每一行时我需要这一切是在1行的每一天。

问题是,现在它膨胀这样它创建一个视图,并把它在每个项目的意见。

已更新一个ArrayAdapter#

我想组中的每一天数组这一数据,所以这将是第1天 - 早餐 - 项目,小吃 - 项目等等,这样我可以把它在一个列表供用户查看。

我所有的数据都存储在2模型类。下面是我的适配器与模型类。

谢谢:)到达那里。

ArrayAdapter类更新

 公共类DietAdapterNew扩展ArrayAdapter< FoodInfoModel> {私人列表< FoodInfoModel>项目;私人TextView的diet_day,breakfast_data,snach1_data,lunch_data,snack2_data,dinner_data;
私人的LinearLayout ratingCntr;
私人TextView的followersText;公共DietAdapterNew(上下文的背景下,列表与LT; FoodInfoModel>项目){
    超(背景下,R.layout.list_diet_single_day);
    this.items =物品;}
公众诠释的getCount(){
    返回items.size();
}
@燮pressWarnings(未登记)
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    视图V = convertView;    如果(V == NULL){
        LayoutInflater李= LayoutInflater.from(的getContext());
        V = li.inflate(R.layout.list_diet_single_day,NULL);
    }    FoodInfoModel infomodel = items.get(位置);
    如果(infomodel!= NULL){        diet_day =(TextView中)v.findViewById(R.id.diet_day);
        breakfast_data =(TextView中)v.findViewById(R.id.breakfast_data);
        snach1_data =(TextView中)v.findViewById(R.id.snack1_data);
        lunch_data =(TextView中)v.findViewById(R.id.lunch_data);
        snack2_data =(TextView中)v.findViewById(R.id.snack2_data);
        dinner_data =(TextView中)v.findViewById(R.id.dinner_data);
              清单< D​​ayFoodModel> daylist =新的ArrayList< D​​ayFoodModel>();            DayFoodModel dayfoodmodel =新DayFoodModel();
            dayfoodmodel.setDay(infomodel.getDay());
            dayfoodmodel.setTime(infomodel.getTime());
            dayfoodmodel.setFoodData(infomodel.getItem()+ infomodel.getMeasure());            diet_day.setText(当前日);
            Collections.sort(daylist,新DayComparator());
            daylist.add(dayfoodmodel);
            Log.v(记录,信息+ daylist);        //};             如果(dayfoodmodel.getTime()== 1){                  如果breakfast_data.setText(dayfoodmodel.getFoodData())(breakfast_data!= NULL);             }             如果(dayfoodmodel.getTime()== 2){                 如果snach1_data.setText(dayfoodmodel.getFoodData())(snach1_data!= NULL);         }             如果(dayfoodmodel.getTime()== 3){                 如果lunch_data.setText(dayfoodmodel.getFoodData())(lunch_data!= NULL);         }             如果(dayfoodmodel.getTime()== 4){                  如果snack2_data.setText(dayfoodmodel.getFoodData())(snack2_data!= NULL);         }             如果(dayfoodmodel.getTime()== 5){                 如果(dinner_data!= NULL)dinner_data.setText(dayfoodmodel.getFoodData());         }        //
         }
//}    返回伏;
}
}

DayFoodModel.java

 公共类DayFoodModel {INT _day;
INT _qty;
INT _time;
串_item;
串_measure;
串_food_data;
公共DayFoodModel()
{}公共DayFoodModel(日整型,诠释数量,诠释时间,字符串项,衡量字符串,字符串food_data){
    this._day =天;
    this._qty =数量;
    this._item =项目;
    this._time =时间;
    this._measure =措施;
    this._food_data = food_data;}公共DayFoodModel(字符串项目,衡量字符串,字符串food_data){
  this._item =项目;
  this._measure =措施;
  this._food_data = food_data;}
公众诠释getDay(){
    返回this._day;
}公共无效setDay(INT天){
    this._day =天;}公众诠释getQty(){
    返回this._qty;
}公共无效setQty(INT数量){
    this._qty =数量;}公众诠释的getTime(){
    返回this._time;
}公共无效的setTime(INT时间){
    this._time =时间;}公共字符串的getItem(){
    返回this._item;
}公共无效setItem(字符串项){
    this._item =项目;
}公共字符串getMeasure(){
    返回this._measure;
}公共无效setMeasure(字符串措施){
    this._measure =措施;
}公共字符串getFoodData(){
    返回this._food_data;
}公共无效setFoodData(字符串food_data){
    this._food_data = food_data;
}
}

FoodInfoModel

 公共类FoodInfoModel
    {INT _dietid;
INT _id;
INT _day;
INT _qty;
INT _time;
串_item;
串_measure;
公共字符串breakfast_data_string;
公共FoodInfoModel()
{}    公共FoodInfoModel(INT dietid,INT ID,日整型,诠释数量,诠释时间,字符串项,字符串措施){    this._id = ID;
    this._dietid = dietid;
    this._day =天;
    this._qty =数量;
    this._item =项目;
    this._measure =措施;    this.breakfast_data_string =措施+项目;
    }公共FoodInfoModel(字符串项目,衡量字符串,字符串breakfast_data_string){
  this._item =项目;
  this._measure =措施;
    this.breakfast_data_string =措施+项目;}公众诠释的getID(){
    返回this._id;
}公共无效SETID(INT ID){
    this._id = ID;}公众诠释getDietID(){
    返回this._dietid;
}公共无效setDietID(INT dietid){
    this._dietid = dietid;}公众诠释getDay(){
    返回this._day;
}公共无效setDay(INT天){
    this._day =天;}公众诠释getQty(){
    返回this._qty;
}公共无效setQty(INT数量){
    this._qty =数量;}公众诠释的getTime(){
    返回this._time;
}公共无效的setTime(INT时间){
    this._time =时间;}公共字符串的getItem(){
    返回this._item;
}公共无效setItem(字符串项){
    this._item =项目;
}公共字符串getMeasure(){
    返回this._measure;
}公共无效setMeasure(字符串措施){
    this._measure =措施;
}公共字符串getBreakfastData(){
    返回this.breakfast_data_string;
}公共无效setBreakfastData(字符串breakfast_data_string){
    this.breakfast_data_string = breakfast_data_string;
}
}


解决方案

您需要一个自定义的比较添加到您的对象,那么你可以使用 Arrays.sort 办法做任何你喜欢的一种排序。

下面是关于如何制造和使用一个参考比较

http://examples.java$c$cgeeks.com/core-java/util/comparator/java-comparator-example/

编辑:

除了排序,你应该使用适配器对现有的数据集。换句话说,这些线在你的适配器应该不存在:

  Col​​lections.sort(daylist,新DayComparator());
        daylist.add(dayfoodmodel);

首先,要排序 - ,然后添加数据。所有的数据应该是数组中,然后排序。

其次,你应该通过所有的数据到适配器这样的排序应该发生的之前 getView 适配器

I have a MySQL table called foods which contain diet information. I am currently running the php script which calls the following sql command Select * from Food where dietid = 1 which returns the image below.

The column day is the day of the diet so day 1, day 2 etc.. the time refers to a point during the day so time 1 is breakfast time 2 is snack time 3 is lunch time 4 is afternoon snack and time 5 is dinner.

I would like to display the data in the following way in a listview for each day of the diet.Description is the made out of qty measure and item

I have the following output in the log-cat at the moment.

UPDATE - EDIT NEW LOGCAT

Using Jims approact i have been able to group this data by day and time in the format that i require however i am now facing the problem which i was facing before, the list gets inflated and it puts the information in each row when i need it all to be in 1 row per 1 day.

The problem is that now it inflates the views like this which creates one view and puts it in for each item.

UPDATED THE ARRAYADAPTER#

I would like to group this data in arrays for each day, so it would be day 1 - breakfast - item, snack - item etc... so that i can put it all in one list for the user to view.

All my data is stored in 2 model classes. Below is my adapter with the model classes.

Thanks :) getting there..

ArrayAdapter Class UPDATED

public class DietAdapterNew extends ArrayAdapter<FoodInfoModel>{

private List<FoodInfoModel> items;



private TextView diet_day, breakfast_data, snach1_data, lunch_data, snack2_data, dinner_data ;


private LinearLayout ratingCntr;
private TextView followersText;



public DietAdapterNew(Context context, List<FoodInfoModel> items) {
    super(context, R.layout.list_diet_single_day);


    this.items = items;

}


public int getCount() {
    return items.size();
}


@SuppressWarnings("unchecked")
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if(v == null) {
        LayoutInflater li = LayoutInflater.from(getContext());
        v = li.inflate(R.layout.list_diet_single_day, null);            
    }

    FoodInfoModel infomodel = items.get(position);


    if(infomodel != null) {



        diet_day = (TextView)v.findViewById(R.id.diet_day);
        breakfast_data = (TextView)v.findViewById(R.id.breakfast_data);
        snach1_data  = (TextView)v.findViewById(R.id.snack1_data);
        lunch_data = (TextView)v.findViewById(R.id.lunch_data);
        snack2_data = (TextView)v.findViewById(R.id.snack2_data);
        dinner_data =  (TextView)v.findViewById(R.id.dinner_data);




              List<DayFoodModel> daylist = new ArrayList<DayFoodModel>();

            DayFoodModel dayfoodmodel = new DayFoodModel();
            dayfoodmodel.setDay(infomodel.getDay());
            dayfoodmodel.setTime(infomodel.getTime());
            dayfoodmodel.setFoodData(infomodel.getItem() + infomodel.getMeasure());

            diet_day.setText("Current day "  );


            Collections.sort(daylist, new DayComparator());
            daylist.add(dayfoodmodel);




            Log.v("Logging", "Info" +  daylist);



        //      };



             if (dayfoodmodel.getTime() == 1 ) {

                  if( breakfast_data != null)  breakfast_data.setText(dayfoodmodel.getFoodData());

             }

             if (dayfoodmodel.getTime() == 2) {

                 if( snach1_data != null)  snach1_data.setText(dayfoodmodel.getFoodData());

         }

             if (dayfoodmodel.getTime() == 3) {

                 if( lunch_data != null)  lunch_data.setText(dayfoodmodel.getFoodData());

         }

             if (dayfoodmodel.getTime() == 4) {

                  if( snack2_data != null)  snack2_data.setText(dayfoodmodel.getFoodData());

         }

             if (dayfoodmodel.getTime() == 5) {

                 if( dinner_data != null)  dinner_data.setText(dayfoodmodel.getFoodData()); 

         }



        //  


         }


//   }

    return v;
}
}

DayFoodModel.java

public class DayFoodModel {

int _day;
int _qty;
int _time;
String _item;
String _measure;
String _food_data;




public DayFoodModel()
{

}



public DayFoodModel(int day, int qty, int time,  String item, String measure, String food_data){


    this._day = day;
    this._qty = qty;
    this._item = item;
    this._time = time;
    this._measure = measure;
    this._food_data = food_data;



}

public DayFoodModel(String item, String measure, String food_data)

{
  this._item = item;
  this._measure = measure;
  this._food_data = food_data;

}


public int getDay(){
    return this._day;
}

public void setDay(int day){
    this._day = day;

}

public int getQty(){
    return this._qty;
}

public void setQty(int qty){
    this._qty = qty;

}

public int getTime(){
    return this._time;
}

public void setTime(int time){
    this._time = time;

}

public String getItem(){
    return this._item;
}

public void setItem(String item){
    this._item = item;
}

public String getMeasure(){
    return this._measure;
}

public void setMeasure(String measure){
    this._measure = measure;
}

public String getFoodData(){
    return this._food_data;
}

public void setFoodData(String food_data){
    this._food_data = food_data;
}


}

FoodInfoModel

public class FoodInfoModel
    {

int _dietid;
int _id;
int _day;
int _qty;
int _time;
String _item;
String _measure;
public String breakfast_data_string;


public FoodInfoModel()
{

}



    public FoodInfoModel(int dietid, int id, int day, int qty, int time,  String item, String measure){

    this._id = id;
    this._dietid = dietid;
    this._day = day;
    this._qty = qty;
    this._item = item;
    this._measure = measure;

    this.breakfast_data_string = measure + item;


    }

public FoodInfoModel(String item, String measure, String breakfast_data_string)

{
  this._item = item;
  this._measure = measure;
    this.breakfast_data_string = measure + item;

}



public int getID(){
    return this._id;
}

public void setID(int id){
    this._id = id;

}

public int getDietID(){
    return this._dietid;
}

public void setDietID(int dietid){
    this._dietid = dietid;

}

public int getDay(){
    return this._day;
}

public void setDay(int day){
    this._day = day;

}

public int getQty(){
    return this._qty;
}

public void setQty(int qty){
    this._qty = qty;

}

public int getTime(){
    return this._time;
}

public void setTime(int time){
    this._time = time;

}

public String getItem(){
    return this._item;
}

public void setItem(String item){
    this._item = item;
}

public String getMeasure(){
    return this._measure;
}

public void setMeasure(String measure){
    this._measure = measure;
}

public String getBreakfastData(){
    return this.breakfast_data_string;
}

public void setBreakfastData(String breakfast_data_string){
    this.breakfast_data_string = breakfast_data_string;
}
}

解决方案

You need to add a custom Comparator to your object, then you can use Arrays.sort method to do sorting of whatever kind you like.

Here is one reference on how to make and use a Comparator:

http://examples.javacodegeeks.com/core-java/util/comparator/java-comparator-example/

EDIT:

Besides the sorting, you should probably use an Adapter against an existing data set. In other words, these lines in your Adapter should not exist:

        Collections.sort(daylist, new DayComparator());
        daylist.add(dayfoodmodel);

First, you are sorting - then adding data. All your data should be in the array, and then sort it.

Second, you should pass all the data into the Adapter so the sort should occur before you do getView in the Adapter

这篇关于Android的数据排序为数组 - ArrayAdapter JSON列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆