2012-04-18 7 views
0

私はアンドロイドにはうってつけですが、xamplesをたくさん読んだことがありますが、これまでのところ成功していません。基本的には、リストビューを使用してbaseadapterを利用すると、複数の行を追加するためのメカニズムは、スクロール機能に問い合わせが行われますが、アダプタが新しいリストを作成するn個の古いものを破棄し、ここでコードリストビューより多くのビューをロードするスクロールダウン

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) { 
     } 

    }); 
} 

ださを実装する上で、今、再び動的URLを照会することです私のアダプタクラスのコードは

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; 
} 

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

答えて

1

リストビューにonscrollchange listenerを追加し、最後の位置が表示されているときに要素を追加し、リストビューのサイズを増やすこともできます。

lazyadapterに1つのメソッドを追加は、あなたがWebサービスをヒットし、応答がnewConcretehashmapにデータを追加し、上記の方法を呼び出します毎回

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

言います。これにより、ハッシュマップで更新されたnewDataのみが取得されます。 notifydatasetchanged()を呼び出すだけです。リストが更新されます。

+0

私はすでにスクロールリスナーに自分のコードで追加しています –

関連する問題