0

私はAndroidの初心者で、たくさんのサンプルを読んだことがありますが、これまでのところ成功していません。基本的に、ベースアダプターを使用するリストビューでは、下にスクロールすると行が追加され、行を追加するメカニズムは次のようになります。動的URLを再度クエリします。スクロール機能を実装すると、クエリが実行されますが、アダプタは新しいリストを生成し、古いリストを破棄します。コードは次のとおりです。

public class Second extends Activity {

static final String Li_nk = "LinkName:";
static final String Image_name = "ImageName:";
// ListView list;
public final static String AUTH = "authentication";
static final String KEY_THUMB_URL = "thumb_image";
// JSONObject j2;
String wrd;
int counter = 01;

// ArrayList<HashMap<String,String>> mylist;
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent i2 = getIntent();
    wrd = i2.getStringExtra("entrd");
    Log.v("keyis", wrd);

    final Handler handler = new Handler();
    Runnable runable = new Runnable() {

        @Override
        public void run() {

            // call the function
            LoadData();
            // also call the same runnable
            handler.postDelayed(this, 40000);
        }
    };
    handler.postDelayed(runable, 10);

}

public void LoadData() {

    JSONObject j2 = JSONfunctions
            .getJSONfromURL("/webservice_search.php?keyword=" + wrd
                    + "&format=json&pagenum=" + counter);
    final ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

    try {
        JSONArray jray = j2.getJSONArray("listings");
        for (int i = 0; i < jray.length(); i++) {
            Log.v("state", "json data being read");
            JSONObject j3 = jray.getJSONObject(i);
            String first = j3.getString("listing");
            Log.v("sublist", first);
            JSONObject j4 = j3.getJSONObject("listing");
            String sec = j4.getString("links");

            int maxLength = (sec.length() < 30) ? sec.length() : 27;
            sec.substring(0, maxLength);
            String cutsec = sec.substring(0, maxLength);
            Log.v("links are", cutsec);
            String img = j4.getString("image_name");
            Log.v("image name is ", img);
            // Uri
            // dimg=Uri.parse("http://zeesms.info/android_app_images/Koala.jpg");
            HashMap<String, String> map = new HashMap<String, String>();

            map.put("Id", String.valueOf(i));
            map.put(Li_nk, cutsec);
            map.put(Image_name, j4.getString("image_name"));

            map.put(KEY_THUMB_URL, "http://zeesms.info/android_app_images/"
                    + img);

            mylist.add(map);

        }

    } catch (JSONException e) {

        Log.e("loG_tag", "Error parsing" + e.toString());
    }
    final LazyAdapter adapter = new LazyAdapter(this, mylist);
    adapter.notifyDataSetChanged();

    View footerView = ((LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.footer, null, false);

    ListView list = (ListView) findViewById(R.id.lv1);
    list.setEmptyView(findViewById(R.id.empty));
    list.addFooterView(footerView);
    list.setAdapter(adapter);

    list.setItemsCanFocus(false);

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // Toast.makeText(getApplicationContext(),"Click ListItem Number "
            // + position, Toast.LENGTH_LONG).show();
            Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri
                    .parse("http://www.google.com/"));
            startActivity(myIntent);
        }

    });
    list.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            // what is the bottom iten that is visible

            int lastInScreen = firstVisibleItem + visibleItemCount;
            if (lastInScreen == totalItemCount) {

                counter++;

                LoadData();
                adapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

    });
}

私のアダプタクラスのコードは

public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader; 
//int count=5;


public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    Collections.reverse(d);
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

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

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

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



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    /*position=1;
    position=2;
    position=3;
    position=4;
    position=5;*/
    View vi=convertView;
    if(convertView==null)

        vi = inflater.inflate(R.layout.custom_row_view1, null);

    TextView title = (TextView)vi.findViewById(R.id.linkname); // merchnts name
    TextView artist = (TextView)vi.findViewById(R.id.imagename); // address
    //TextView duration = (TextView)vi.findViewById(R.id); // distance
   ImageView thumb_image=(ImageView)vi.findViewById(R.id.mClogo); // logo

    HashMap<String, String> jsn = new HashMap<String, String>();
    jsn = data.get(position);

    // Setting all values in listview
   title.setText(jsn.get(Second.Li_nk));
   artist.setText(jsn.get(Second.Image_name));
    //duration.setText(song.get(CustomizedListView.KEY_DURATION));
    imageLoader.DisplayImage(jsn.get(Second.KEY_THUMB_URL), thumb_image);
    return vi;
}

新しいリストが古いリストを追加する最も簡単な方法、またはスクロール後にビューを追加する他の方法はありますか?

4

1 に答える 1

1

リストビューに onscrollchange リスナーを追加し、最後の位置が表示されたら要素を追加し、それに応じてリストビューのサイズを大きくすることができます。

lazyadapter に 1 つのメソッドを追加します。

setData(HashMap<string,string> newdata){
this.data = newdata;
}

Webサービスにアクセスして応答を取得するたびに、newConcretehashmapにデータを追加して上記のメソッドを呼び出します。これにより、ハッシュマップで更新された newData のみが取得されます。次に、notifydatasetchanged(); を呼び出します。リストが更新されます。

于 2012-04-18T14:57:51.297 に答える