從網上綁定新聞數據到ListView

從網上綁定新聞數據到ListViewandroid

//佈局界面有2個xml文件 1 -- activity_main.xml文件
                       2 -- item_activity.xml文件json

//注意添加聯網權限網絡

一、activity_main.xml文件 佈局ide

代碼工具

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >佈局

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />this

    <LinearLayout
        android:id="@+id/progress_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#000"
        android:gravity="center"
        android:orientation="horizontal"
        android:visibility="gone">url

        <ProgressBar
            android:id="@+id/progressbar"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />xml

        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20sp"
            android:text="數據加載中..."
            android:textSize="20sp" />
    </LinearLayout>繼承

</RelativeLayout>

----------------------

二、item_activity.xml文件 佈局

代碼

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp"/>
   
    <TextView
        android:id="@+id/text_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="15sp"/>
   
    <TextView
        android:id="@+id/text_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>

</LinearLayout>

---------------------

三、MainActivity 類

代碼

public class MainActivity extends Activity {
 private LinearLayout progress_layout;
 private ListView listview;
 private boolean isbottom;
 private int currentpage = 1;
 private MyAdapter adapter;
 private List<Map<String, Object>> data;
 private static String url = "http://m2.qiushibaike.com/article/list/suggest?page=";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  this.listview = (ListView) this.findViewById(R.id.listview);
  this.progress_layout = (LinearLayout) this
    .findViewById(R.id.progress_layout);

  data = new ArrayList<Map<String, Object>>();
  adapter = new MyAdapter(data);
  listview.setAdapter(adapter);
  new MyAsyncTask().execute(url + currentpage);

//滾動事件 監聽
  listview.setOnScrollListener(new OnScrollListener() {

   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
    case OnScrollListener.SCROLL_STATE_IDLE:
     if (isbottom) {
//若是是listview 底部 頁碼就+1
      currentpage++;
//顯示加載進度條
      progress_layout.setVisibility(view.VISIBLE);
//在從新啓動工具類 下載數據
      new MyAsyncTask().execute(url + currentpage);
     }
     break;
    case OnScrollListener.SCROLL_STATE_FLING:
     break;
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
     break;
    }

   }

   @Override
   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {
//ListView 底部
    isbottom = ((firstVisibleItem + visibleItemCount) == totalItemCount);
   }
  });
 }

//自定義 適配器 繼承 BaseAdapter 類
 class MyAdapter extends BaseAdapter {

  private List<Map<String, Object>> data;

  public MyAdapter(List<Map<String, Object>> data) {
   this.data = data;
  }

  @Override
  public int getCount() {
   return this.data.size();
  }

  @Override
  public Object getItem(int position) {
   return this.data.get(position);
  }

  @Override
  public long getItemId(int position) {
   return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   ViewHolder viewholder = null;
   if (convertView == null) {
    viewholder = new ViewHolder();
    convertView = getLayoutInflater().inflate(
      R.layout.item_activity, null);
    TextView text_content = (TextView) convertView
      .findViewById(R.id.text_content);
    TextView text_image = (TextView) convertView
      .findViewById(R.id.text_image);
    TextView text_count = (TextView) convertView
      .findViewById(R.id.text_count);

    viewholder.text_content = text_content;
    viewholder.text_image = text_image;
    viewholder.text_count = text_count;

    convertView.setTag(viewholder);
   } else {
    viewholder = (ViewHolder) convertView.getTag();
   }

   viewholder.text_content.setText(this.data.get(position)
     .get("content").toString());
   if (!data.get(position).get("image").equals("null")) {
    viewholder.text_image.setText(this.data.get(position)
      .get("image").toString());
   }
   viewholder.text_count.setText(this.data.get(position)
     .get("comment_count").toString());
   return convertView;
  }

  class ViewHolder {
   private TextView text_content;
   private TextView text_image;
   private TextView text_count;
  }

 }

//自定義 工具類  -- 用於下載須要的數據
 class MyAsyncTask extends AsyncTask<String, Void, byte[]> {
  @Override
  protected byte[] doInBackground(String... params) {
   String url = params[0];
   HttpGet get = new HttpGet(url);
   HttpClient client = new DefaultHttpClient();
   HttpResponse response;
   try {
    response = client.execute(get);
    if (response.getStatusLine().getStatusCode() == 200) {
     return EntityUtils.toByteArray(response.getEntity());
    }
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return null;
  }

  @Override
  protected void onPostExecute(byte[] result) {
   super.onPostExecute(result);
   if (result != null) {
//把下載好的數據 進行解析 而後返回解析好 須要的數據 賦值給 一個集合裝起來
    List<Map<String, Object>> parser_data_list = parserJson(new String(
      result));

    adapter.data.addAll(parser_data_list);
//調用該 方法 更新UI 的數據
    adapter.notifyDataSetChanged();
   } else {
    Toast.makeText(MainActivity.this, "網絡錯誤!", Toast.LENGTH_SHORT)
      .show();
   }
   progress_layout.setVisibility(View.GONE);
  }
//用於json 解析 須要的數據 的類
  private List<Map<String, Object>> parserJson(String string) {
   List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
   try {
    JSONObject obj = new JSONObject(string);
    JSONArray array_item = obj.getJSONArray("items");
    for (int i = 0; i < array_item.length(); i++) {
     Map<String, Object> parser_data_map = new HashMap<String, Object>();
     JSONObject obj_data = array_item.getJSONObject(i);
     parser_data_map.put("content",
       obj_data.getString("content"));
    
     parser_data_map.put("image", obj_data.getString("image"));
     parser_data_map.put("comment_count",
       obj_data.getString("comments_count"));
     Log.i("data","parser_data_map:" + parser_data_map.size());
     list.add(parser_data_map);
    }
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   Log.i("data","parserJson-- list:" + list.size());
   return list;
  }

 }}

相關文章
相關標籤/搜索