использовать Android динамически загружать больше элементов в просмотр списка нужна помощь - PullRequest
1 голос
/ 23 апреля 2011
package fshizzle.com;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.Toast;

public class welcome extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent sender=getIntent();
        String login = sender.getStringExtra("extra_login");

        setContentView(R.layout.listplaceholder);

        ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>();    

        JSONObject json = JSONfunctions.getJSONfromURL(var_global.URL+"json/listview/"+login+".json");

        try{

            JSONArray  earthquakes = json.getJSONArray("infos");

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

                HashMap<String, Object> map = new HashMap<String, Object>();    
                JSONObject e = earthquakes.getJSONObject(i);

                map.put("id",  String.valueOf(i));
                map.put("name", "infos name:" + e.getString("user"));
                map.put("age", "age: " +  e.getString("age"));

                URL pictureURL = new URL(var_global.URL+"upload/thumbs/"+e.getString("image"));
                Bitmap bitmap = BitmapFactory.decodeStream(pictureURL.openStream());
                map.put("img",bitmap);

                //http://www.imagemagick.org/Usage/thumbnails/


                mylist.add(map);            
            }       
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        SimpleAdapter adapter = new SimpleAdapter(this, mylist, R.layout.json2, new String[] { "img", "name", "age" }, 
                                new int[] { R.id.item_img, R.id.item_title, R.id.item_subtitle });

        adapter.setViewBinder(new MyViewBinder());
        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                Toast.makeText(welcome.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

            }
        });
    }

    public class MyViewBinder implements ViewBinder {
        public boolean setViewValue(View view, Object data,String textRepresentation) {
            if( (view instanceof ImageView) & (data instanceof Bitmap) ) {
                ImageView iv = (ImageView) view;
                Bitmap bm = (Bitmap) data;  
                iv.setImageBitmap(bm);  
                return true;
            }

            return false;
        }
    }



}   

это синтаксический анализ файла json и создание списка с веб-изображением. Я хотел бы использовать этот код, но не могу http://p -xr.com / android-tutorial-dynamicicaly-load-more-items-to -the-listview-бесконечный-список /

Кто-то более опытный может сказать мне, как все это вставить? благодарю вас Я не могу отобразить информацию о моих файлах json с кодом в URL

также я пробую этот код http://benjii.me/2010/08/endless-scrolling-listview-in-android/ но в этой ошибке "Метод setOnScrollListener (welcome.EndlessScrollListener) не определен для типа SimpleAdapter" с

adapter.setOnScrollListener(new EndlessScrollListener());
setListAdapter(adapter);

код.

С этим кодом:

this.getListView().setOnScrollListener(new EndlessScrollListener());

без ошибок, но все отображается одновременно. ????

Что за функция LoadGigsTask ()? я использую // LoadGigsTask не определен в учебнике, может быть, из-за этого, нет?

все нормально в коде с

((AbsListView) this.view).setOnScrollListener(new EndlessScrollListener());

Но в эмуляторе вылет в этой строке ...

Наконец, я использую это, я ищу обновить список сейчас ...

this.getListView().setOnScrollListener(new OnScrollListener(){

        //useless here, skip!
        public void onScrollStateChanged(AbsListView view, int scrollState) {}

        //dumdumdum         
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {


            //what is the bottom iten that is visible
            int lastInScreen = firstVisibleItem + visibleItemCount;             

            //is the bottom item visible & not loading more already ? Load more !
            if((lastInScreen == totalItemCount) && !(loadingMore)){ 
                Toast.makeText(getApplicationContext(), "OK END LIST.", Toast.LENGTH_LONG).show();
                //Thread thread =  new Thread(null, loadMoreListItems);
                //thread.start();

            }
        }
    });

Ответы [ 2 ]

5 голосов
/ 26 апреля 2011

Для получения дополнительной информации мой код используется для динамической загрузки списка просмотра;)

this.getListView().setOnScrollListener(new OnScrollListener(){

        //useless here, skip!
        public void onScrollStateChanged(AbsListView view, int scrollState) {}

        //dumdumdum         
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {


            //what is the bottom iten that is visible
            int lastInScreen = firstVisibleItem + visibleItemCount;             

            //is the bottom item visible & not loading more already ? Load more !
            if((lastInScreen == totalItemCount) && (loadingMore)){
            Adapter.notifyDataSetChanged(); 
            }
            if((lastInScreen == totalItemCount) && !(loadingMore)){
                i++;
                //on envoie la page a aller chercher
                String page3 = getPage(var_global.URL+"listview.php?login="+login+"&page="+i);
                Log.i(LOG_TAG, page3);

                JSONObject json = JSONfunctions.getJSONfromURL(var_global.URL+"json/listview/"+login+".json");

                try{

                    JSONArray  earthquakes = json.getJSONArray("infos");

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

                        HashMap<String, Object> map = new HashMap<String, Object>();    
                        JSONObject e = earthquakes.getJSONObject(i);

                        //si user == a endlist
                        if (e.getString("user").equals("endlistfshizzle")) {
                            loadingMore = true;
                        }
                        map.put("id",  String.valueOf(i));
                        map.put("name", "infos name:" + e.getString("user"));
                        map.put("age", "age: " +  e.getString("age"));

                        URL pictureURL = new URL(var_global.URL+"upload/thumbs/"+e.getString("image"));
                        Bitmap bitmap = BitmapFactory.decodeStream(pictureURL.openStream());
                        map.put("img",bitmap);              
                        //http://www.imagemagick.org/Usage/thumbnails/                  
                        mylist.add(map);            
                    }       
                }catch(JSONException e)        {
                     Log.e("log_tag", "Error parsing data "+e.toString());
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }                           

                Adapter.notifyDataSetChanged();
            }
        }
    });                

Хорошее программирование вообще !!

3 голосов
/ 24 апреля 2011

Представление списка может динамически загружать элементы с помощью адаптера. документация для разработчиков содержит большое руководство по использованию ListView и GridView. По сути, вы устанавливаете адаптер вашего ListView с набором объектов. Затем, когда вы обновляете объекты, вы можете вызвать notifyDataSetChanged.

ArrayList<String> myitems = new ArrayList<String>();
myitems.add("Hello");
myitems.add("Line 2");
myitems.add("Another line");

ListView listView = (ListView)findViewById(R.id.mylistview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, myitems));
listView.setAdapter(adapter);

myitems.add("Goodbye");
adapter.notifyDataSetChanged();

R.id.mylistview - это идентификатор, который я дал своему ListView

R.layout.list_item - это макет для каждого элемента списка. Это просто простое TextView

...