0

アプリケーションコードでエンドレスリストビューアダプターを使用しようとしていますが、リストビューで値を表示できない方法があります。通常のリストビュー アダプタを使用すると、私のコードは問題なく動作します。私は CWAC-endless adpater を使用しようとしています。読み込み後に空白の画面が表示されるため、asynctask で実行する方法を取得できます。以下は、いくつかの私のコードです。

 public class EndlessAdapterExample extends ListActivity { 
        public JSONArray jsonarray,jsondatearray; 

        public String url;
        public String selectedvalue;
        public String TAG = "TAG Event Display";
        public String SuggestCity;
        public String SuggestState;
        public String suggestCountry;
        public String event_id,address;


        String lat; 
        String lng;

        public String event_name;
        public String dateKey;
        public String datetime,timenew;
        Calendar cal;

        public SharedPreferences prefs;
        public Editor editor;
        public String access_token,id,username;
        public static ArrayList<EventsBean> arrayEventsBeans = new ArrayList<EventsBean>();
        ArrayList<DateBean> sortArray = new ArrayList<DateBean>();


        public SAmpleAdapter adapter;
        public ImageView img_menu,img_calender;
        public ListView listview;


         static int LIST_SIZE;
         private int mLastOffset = 0;

         static final int BATCH_SIZE = 10;

         ArrayList<EventsBean> countriesSub = new ArrayList<EventsBean>();


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setTheme(android.R.style.Theme);
            setContentView(R.layout.sample_endless);



            listview = (ListView)findViewById(android.R.id.list);   

        try {
            // Preferences values fetched from the preference of FBConnection class.
            prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            access_token = prefs.getString("access_token", null);
            id = prefs.getString("uid", null);
            username = prefs.getString("username", null);



            if(access_token == null && id == null && username == null)
            {
                Toast.makeText(getApplicationContext(), "FaceBook Login was not successful" +
                        "/nPlease Relogin.", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Log.i(TAG, "VALUES::" + access_token+ "  " + id + "  " +username);
                url = "mu Url"
            }

        } catch (NullPointerException e) {

            Log.i(TAG, "User Not Logged IN " + e.getMessage());
                // TODO Auto-generated catch block
                e.printStackTrace();
        }




            init();

         listview.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
         // TODO Auto-generated method stub

             // Fetching the position from the listview which has been selected.

            }
    });


        }    

        private void init() {

             new FetchEventValues().execute(); 

             }

             private void setLastOffset(int i) {
              mLastOffset = i;  
             }

             private int getLastOffset(){
              return mLastOffset;
             }

             private void displayList(ArrayList<EventsBean> countriesSub) {  
              setListAdapter(new DemoAdapter());
             }


    // AsyncTask Class called in the OnCreate() when the activity is first started.


        public class FetchEventValues extends AsyncTask<Void, ArrayList<EventsBean>, ArrayList<EventsBean>>
        {
            ProgressDialog progressdialog = new  ProgressDialog(EndlessAdapterExample.this);

            ArrayList<EventsBean> merge = new ArrayList<EventsBean>();

            ArrayList<EventsBean> localList;


            public  EventsBean eventsbean;

        @SuppressLint("SimpleDateFormat")
        @SuppressWarnings("unchecked")
        @Override
        protected ArrayList<EventsBean> doInBackground(Void... params) {
             // Creating JSON Parser instance
            JsonParser jParser = new JsonParser();

           // getting JSON string from URL

            JSONObject jsonobj = jParser.getJSONFromUrl(url);

            Log.i(TAG, "URL VALUES:" + url);

            try{
                 // Code to get the auto complete values  Autocomplete Values

                JSONArray jsonAarray = jsonobj.getJSONArray(Constants.LOCATIONS);

                eventsbean = new EventsBean();

                Log.e(TAG, "Location Array Size:" + jsonAarray.length());   

                for(int j = 0 ; j < jsonAarray.length() ; j++)
                 {
                    if(!jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_CITY) && !jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_STATE) && !jsonAarray.getJSONObject(j).isNull(Constants.LOCATION_COUNTRY))
                    {
                        JSONObject job = jsonAarray.getJSONObject(j);

                        if(job.has(Constants.LOCATION_STATE))
                        {
                            SuggestCity = job.getString(Constants.LOCATION_CITY);
                            eventsbean.setLocation_city(job.getString(Constants.LOCATION_CITY));
                            SuggestState = job.getString(Constants.LOCATION_STATE);
                            eventsbean.setLocation_state(job.getString(Constants.LOCATION_STATE));
                            suggestCountry = job.getString(Constants.LOCATION_COUNTRY);
                            eventsbean.setLocation_country(job.getString(Constants.LOCATION_COUNTRY));
                        }       


                    } 


                 }


                       // JSON object to fetch the events in datewise format
                       JSONObject eventobject = jsonobj.getJSONObject("events");

                       // @SuppressWarnings("unchecked")
                        Iterator<Object> keys = eventobject.keys();

                        while (keys.hasNext()) {

                          String datestring = String.valueOf(keys.next());

                          if (datestring.trim().length() > 0) {
                              SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                              Date date = formatter.parse(datestring);

                              DateBean dateBean = new DateBean(date);
                              sortArray.add(dateBean);
                             } 

                         // JSONArray jsonArray = eventobject.getJSONArray(datestring);
                          //System.out.println(" --"+jsonArray);
                        }

                        System.out.println("size:"+sortArray.size());

                        System.out.println("==========sorting array======");
                        Collections.sort(sortArray,new CompareDate());
                        //reverse order
                        //Collections.reverse(sortArray);

                        for(DateBean d : sortArray){
                         dateKey = new SimpleDateFormat("yyyy-MM-dd").format(d.getDate());
                         System.out.println(dateKey);

                         Date today = new Date();
                         Date alldates = d.getDate();
                         cal = Calendar.getInstance();
                      ///  Calendar alldates1 = Calendar.getInstance();

                         JSONArray jsonArray = eventobject.getJSONArray(dateKey);
                         System.out.println(" --"+jsonArray);


                         for (int i = 0 ; i < jsonArray.length() ; i++)
                         {

                             if (alldates.compareTo(today) > 0) 
                                // if (alldates1  > cal) alldates.getTime() >= today.getTime()
                             {

                             JSONObject jsonobjname = jsonArray.getJSONObject(i);

                             eventsbean = new EventsBean();

                             JSONObject jobjectpicture = jsonobjname.getJSONObject(Constants.PICTURE);
                             JSONObject jobjeventpicture = jobjectpicture.getJSONObject(Constants.DATA);
                             eventsbean.setUrl(jobjeventpicture.getString(Constants.URL));

                             if(jsonobjname.has(Constants.OWNER))
                             {
                             JSONObject owner_obj = jsonobjname.getJSONObject(Constants.OWNER);
                             eventsbean.setOwner_id(owner_obj.getString(Constants.OWNER_ID));
                             eventsbean.setOwner_name(owner_obj.getString(Constants.OWNER_NAME));
                             String owner_name = owner_obj.getString(Constants.OWNER_NAME);
                             Log.i(TAG, "Owner:" + owner_name);
                             }

                            if(!jsonobjname.isNull(Constants.COVER))
                            {
                             JSONObject objectcover = jsonobjname.getJSONObject(Constants.COVER);
                             eventsbean.setCover_id(objectcover.getString(Constants.COVER_ID));
                             eventsbean.setSource(objectcover.getString(Constants.SOURCE));
                             String cover_url = objectcover.getString(Constants.SOURCE);
                             Log.i(TAG, "Cover Url:" + cover_url);
                             eventsbean.setOffset_y(objectcover.getString(Constants.OFFSET_Y));
                             eventsbean.setOffset_x(objectcover.getString(Constants.OFFSET_X));
                            }


                             eventsbean.setName(jsonobjname.getString(Constants.NAME));
                             eventsbean.setEvent_id(jsonobjname.getString(Constants.EVENT_ID));
                             eventsbean.setStart_time(jsonobjname.getString(Constants.START_TIME));
                             eventsbean.setDescription(jsonobjname.getString(Constants.DESCRIPTION));
                             eventsbean.setLocation(jsonobjname.getString(Constants.LOCATION));

                             if(!jsonobjname.isNull(Constants.IS_SILHOUETTE))
                             {
                                eventsbean.setIs_silhouette(jsonobjname.getString(Constants.IS_SILHOUETTE)); 
                             }

                             eventsbean.setPrivacy(jsonobjname.getString(Constants.PRIVACY));
                             datetime = jsonobjname.getString(Constants.START_TIME);


                             if(!jsonobjname.isNull(Constants.VENUE))
                             {

                             JSONObject objectvenue = jsonobjname.getJSONObject(Constants.VENUE);

                             if(objectvenue.has(Constants.VENUE_NAME))
                             {
                                 eventsbean.setVenue_name(objectvenue.getString(Constants.VENUE_NAME));
                                 event_name = objectvenue.getString(Constants.VENUE_NAME); 
                                 Log.i(TAG, "Event Venue Name:" + event_name);
                             }
                             else
                             {   

                             eventsbean.setLatitude(objectvenue.getString(Constants.LATITUDE));
                             eventsbean.setLongitude(objectvenue.getString(Constants.LONGITUDE));
                             eventsbean.setCity(objectvenue.getString(Constants.CITY));
                             eventsbean.setState(objectvenue.getString(Constants.STATE));
                             eventsbean.setCountry(objectvenue.getString(Constants.COUNTRY));
                             eventsbean.setVenue_id(objectvenue.getString(Constants.VENUE_ID));
                             eventsbean.setStreet(objectvenue.getString(Constants.STREET));
                             address = objectvenue.getString(Constants.STREET);
                             eventsbean.setZip(objectvenue.getString(Constants.ZIP));

                    }
                }
                             arrayEventsBeans.add(eventsbean);

                             Log.i(TAG, "arry list values:" + arrayEventsBeans.size());


                            }
                        }
                     }

                   }catch(Exception e){
                       localList=null;
                       Log.e(TAG , "Exception Occured:" + e.getMessage());
                   }


                return arrayEventsBeans;
            }


            class CompareDate implements Comparator<DateBean>{

               @Override
               public int compare(DateBean d1, DateBean d2) {

                return d1.getDate().compareTo(d2.getDate());
               }   
        }



            @Override
            protected void onPostExecute(ArrayList<EventsBean> result) {
                super.onPostExecute(result);
                if(this.progressdialog.isShowing()) 
                {
                    this.progressdialog.dismiss();
                }   

                //   adapter = new SAmpleAdapter(EndlessAdapterExample.this,0, arrayEventsBeans);

                    //listview.setAdapter(adapter);

                //displayList(arrayEventsBeans);

                LIST_SIZE = arrayEventsBeans.size();

                for (int i = 0; i <= BATCH_SIZE; i++) {
                    countriesSub.add(arrayEventsBeans.get(i));
                }
                setLastOffset(BATCH_SIZE);
                displayList(countriesSub);
                Log.i(TAG, "country list:" + countriesSub.size());

            }


            @Override
            protected void onPreExecute() {

                super.onPreExecute();



                this.progressdialog.setMessage("Loading....");
                this.progressdialog.setCanceledOnTouchOutside(false);
                this.progressdialog.show();
            }


        }

        public class SAmpleAdapter extends ArrayAdapter<EventsBean> {

            Context context;

            public   ArrayList<EventsBean> mOriginalvalues;

            private ArrayList<EventsBean> mDisplayvalues;

            ImageLoader imageloader;

            public String datenew,datetime,date_text_value,timenew;

            public int date_text,year;

            public String time,month,description;

            public LayoutInflater inflator =  null;

            public SAmpleAdapter(Context context, int resource, ArrayList<EventsBean> mEventarraylist) {
                super(context, resource , mEventarraylist);
                // TODO Auto-generated constructor stub

                this.mOriginalvalues = mEventarraylist;
                this.mDisplayvalues = mEventarraylist;
                inflator =   (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                imageloader=new ImageLoader(context.getApplicationContext());   

                getFilter();
            }

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return mOriginalvalues.size();
            }

            @Override
            public EventsBean getItem(int position) {
                // TODO Auto-generated method stub
                return mOriginalvalues.get(position);
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub

                 Holder viewHolder;

                if(convertView == null)
                {
                     viewHolder=new Holder();
                    convertView = inflator.inflate(R.layout.activity_list_items, parent, false);

                     viewHolder.txt_name = (TextView)convertView.findViewById(R.id.textname);
                     viewHolder.txt_owner_name = (TextView)convertView.findViewById(R.id.ownername);
                     viewHolder.txt_time = (TextView)convertView.findViewById(R.id.date);
                     viewHolder.txt_date = (TextView)convertView.findViewById(R.id.txt_date_value);
                     viewHolder.txt_month = (TextView)convertView.findViewById(R.id.txt_month_value);
                     viewHolder.txt_year = (TextView)convertView.findViewById(R.id.txt_year_value);

                    viewHolder.userimg = (ImageView)convertView.findViewById(R.id.imageView1);

                     convertView.setTag(viewHolder);
                }

                else
                {
                     viewHolder=(Holder)convertView.getTag();
                }


                viewHolder.txt_name.setText(mOriginalvalues.get(position).getName());
                viewHolder.txt_owner_name.setText(mOriginalvalues.get(position).getOwner_name());
                String url = mOriginalvalues.get(position).getSource();

                date_text_value = mOriginalvalues.get(position).getStart_time();

                try {
                    parseDateFromString(date_text_value);
                } catch (Exception e) {
                    Log.i("Adapter TAG", "Date Exception" + e.getMessage());
                }


                viewHolder.txt_date.setText(String.valueOf(date_text));
                viewHolder.txt_month.setText(month);
                viewHolder.txt_year.setText(String.valueOf(year));

                Log.i("TEST", "Date:" + date_text_value);

                imageloader.DisplayImage(url, viewHolder.userimg);

                viewHolder.txt_time.setText(timenew);


                return convertView;
            }

             public void resetData() {
                 mOriginalvalues = mDisplayvalues;
         }



            @SuppressLint("SimpleDateFormat")
            public Date parseDateFromString(String aDateString){
                SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

                Calendar c = Calendar.getInstance();
                Date date= new Date();
                try {

                    date= inputFormat.parse(aDateString);

                    System.out.println(date);

                    SimpleDateFormat day = new SimpleDateFormat("dd-MMM-yyyy");
                    SimpleDateFormat time = new SimpleDateFormat("hh:mm a", Locale.getDefault());

                    SimpleDateFormat month_date = new SimpleDateFormat("MMM");


                    c.setTime(inputFormat.parse(aDateString));

                    System.out.println(day.format(date));

                    datenew  = day.format(date).toString();

                    date_text = c.get(Calendar.DAY_OF_MONTH);
                    month = month_date.format(c.getTime());
                    year = c.get(Calendar.YEAR);

                    System.out.println("Year = " + c.get(Calendar.YEAR));
                    System.out.println("Month = " + month);
                    System.out.println("Day = " + date_text);

                    System.out.println(time.format(date));

                    timenew = time.format(date).toString();

                } catch (ParseException e) {

                    Log.i("TAG", "DateFormat Pasring Error:" + e.getMessage());
                }

                return date;

            }


            private class Holder{
                TextView txt_name;
                TextView txt_owner_name ;
                TextView txt_time;
                TextView txt_date;
                TextView txt_month;
                TextView txt_year;
                ImageView userimg; 
            }

        }




        class DemoAdapter extends EndlessAdapter {
              private RotateAnimation rotate=null;
              ArrayList<EventsBean> tempList = new ArrayList<EventsBean>();

             LayoutInflater inflator =   (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

              DemoAdapter() {
               super(new      SAmpleAdapter(EndlessAdapterExample.this,R.layout.sample_endless,countriesSub));
               inflator =   (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
                 0.5f, Animation.RELATIVE_TO_SELF,
                 0.5f);
               rotate.setDuration(600);
               rotate.setRepeatMode(Animation.RESTART);
               rotate.setRepeatCount(Animation.INFINITE);
              }

              @Override
              protected View getPendingView(ViewGroup parent) {
               View row=getLayoutInflater().inflate(R.layout.row, null);

               View child=row.findViewById(R.id.textview1);
               child.setVisibility(View.GONE);
               child=row.findViewById(R.id.throbber);
               child.setVisibility(View.VISIBLE);
               child.startAnimation(rotate);

               return(row);
              }

              @Override
              protected boolean cacheInBackground() {
               tempList.clear();
               int lastOffset = getLastOffset();
               if(lastOffset < LIST_SIZE){
                int limit = lastOffset + BATCH_SIZE;
                for(int i=(lastOffset+1); (i<=limit && i<LIST_SIZE); i++){
                 tempList.add(arrayEventsBeans.get(i));
                }    
                setLastOffset(limit);

                if(limit<LIST_SIZE){
                 return true;
                } else {
                 return false;
                }
               } else  {

                return false;
               }


              }


              @SuppressLint("NewApi")
            @Override
              protected void appendCachedData() {

               @SuppressWarnings("unchecked")
               ArrayAdapter<EventsBean> arrAdapterNew =        (ArrayAdapter<EventsBean>)getWrappedAdapter();

               int listLen = tempList.size();
               for(int i=0; i<listLen; i++){
                arrAdapterNew.addAll(tempList.get(i));
               }
              }
        }
    }

コードを更新しました。リストビューの最後に到達した後に複数の値が得られるため、カスタムアダプターに問題があると思います。最初は10個の値を取得しますが、更新後に再び同じ10個の値を取得しますが、カウントは121に達します.

4

1 に答える 1

0

init()以下のように置き換えます。

 private void init() {
             new FetchEventValues().execute(); 
 }

onPostExecute()以下に置き換えます。

@Override
        protected void onPostExecute(ArrayList<EventsBean> result) {
            super.onPostExecute(result);
            if (this.progressdialog.isShowing()) {
                this.progressdialog.dismiss();
            }

            // adapter = new SAmpleAdapter(EndlessAdapterExample.this,0,
            // arrayEventsBeans);

            // listview.setAdapter(adapter);

            LIST_SIZE = arrayEventsBeans.size();

                    for (int i = 0; i <= BATCH_SIZE; i++) {
                countriesSub.add(arrayEventsBeans.get(i));
            }
            setLastOffset(BATCH_SIZE);
            displayList(countriesSub);
        }
于 2013-11-25T12:29:14.867 に答える