從網上綁定新聞數據到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;
}
}}