您的位置:首页 > 其它

ListView的多条目加载

2017-09-08 17:19 302 查看
一. 在MainActivity中的代码:

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import com.google.gson.Gson;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import Adapter.NewsAdapter;
import Bean.NewsBean;

public class MainActivity extends AppCompatActivity {
private ListView listView;

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

listView = (ListView) findViewById(R.id.listView);

jsonTask();
}

private void jsonTask() {
new AsyncTask<String,Void,String>(){

@Override
protected String doInBackground(String... strings) {
try {
//客户端
HttpClient client = new DefaultHttpClient();
//get请求方式
HttpGet httpGet = new HttpGet(strings[0]);
//响应对象
HttpResponse response = client.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200){
InputStream inputStream = response.getEntity().getContent();
String json = streamToString(inputStream,"utf-8");
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(String result) {
//解析数据
NewsBean newsBean = new Gson().fromJson(result, NewsBean.class);
List<NewsBean.ResultBean.DataBean> list = newsBean.getResult().getData();

//设置适配器
NewsAdapter adapter = new NewsAdapter(MainActivity.this, list);
listView.setAdapter(adapter);
}
}.execute("http://v.juhe.cn/toutiao/index?type=top&key=2f092bd9ce76c0257052d6d3c93c11b4");
}

//Json数据解析的自定义方法
private String streamToString(InputStream inputStream, String s) {
try {
//转换流
InputStreamReader streamReader = new InputStreamReader(inputStream, s);
//缓冲流
BufferedReader reader = new BufferedReader(streamReader);
//缓冲区
StringBuilder builder = new StringBuilder();

//读取数据
String data = null;
while ((data = reader.readLine())!=null){
builder.append(data);
}

//关流,返回数据
reader.close();
return  builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}


二 .自定义适配器

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
import Bean.NewsBean;
import activity.listview.R;

public class NewsAdapter extends BaseAdapter{
private Context context;
private List<NewsBean.ResultBean.DataBean> list;
private final int TYPE_IMAGE_THREE = 0;
private final int TYPE_IMAGE_TWO = 1;
private final int TYPE_IMAGE_ONE = 2;

public NewsAdapter(Context context, List<NewsBean.ResultBean.DataBean> list) {
this.context = context;
this.list = list;
}

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

@Override
public Object getItem(int i) {
return list.get(i);
}

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

/**
* 获取视图类型的数量...也就是有多少种条目类型
*/
@Override
public int getViewTypeCount() {
return 3;
}

/**
* 返回当前位置条目视图的类型....返回值是int值
* @param position ...当前位置
* @return
*/
@Override
public int getItemViewType(int position) {
//根据数据中的内容进行判断,...当前位置显示的是什么内容
if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null && list.get(position).getThumbnail_pic_s03() != null ){
return TYPE_IMAGE_THREE;
}else if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null ){
return TYPE_IMAGE_TWO;
}
return TYPE_IMAGE_ONE;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//判断展示的视图
if (getItemViewType(i) == TYPE_IMAGE_ONE){
ImageOneHolder holder;
if (view == null){
view = View.inflate(context,R.layout.image_one,null);
holder = new ImageOneHolder();

//查找控件
holder.title = view.findViewById(R.id.title);
holder.one = view.findViewById(R.id.image_one);

//绑定数据
view.setTag(holder);
}else{
//解绑
holder = (ImageOneHolder) view.getTag();
}

//获取数据重新赋值
holder.title.setText("标题:"+list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),holder.one);
}
else if(getItemViewType(i) == TYPE_IMAGE_TWO){
ImageTwoHolder holder;
if (view == null){
view = View.inflate(context,R.layout.image_two,null);
holder = new ImageTwoHolder();

//查找控件
holder.title = view.findViewById(R.id.title);
holder.image_01 = view.findViewById(R.id.image_01);
holder.image_02 = view.findViewById(R.id.image_02);

//绑定数据
view.setTag(holder);
}else{
//解绑
holder = (ImageTwoHolder) view.getTag();
}

//获取数据重新赋值
holder.title.setText("标题:"+list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),holder.image_01);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s02(),holder.image_02);
}
else if (getItemViewType(i) == TYPE_IMAGE_THREE) {
ImageThreeHolder holder;
if (view == null) {
view = View.inflate(context, R.layout.image_three, null);
holder = new ImageThreeHolder();

//查找控件
holder.title = view.findViewById(R.id.title);
holder.image_001 = view.findViewById(R.id.image_001);
holder.image_002 = view.findViewById(R.id.image_002);
holder.image_003 = view.findViewById(R.id.image_003);

//绑定数据
view.setTag(holder);
} else {
//解绑
holder = (ImageThreeHolder) view.getTag();
}

//获取数据重新赋值
holder.title.setText("标题:" + list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(), holder.image_001);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s02(), holder.image_002);
ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s03(), holder.image_003);
}
return view;
}

static class ImageThreeHolder{
TextView title;
ImageView image_001,image_002,image_003;
}
static class ImageTwoHolder{
TextView title;
ImageView image_01,image_02;
}
static class ImageOneHolder{
TextView title;
ImageView one;
}
}


三. 自定义一个bean类

四. 配置的自定义 Imageloader 类

import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class ImageUtil extends Application{
@Override
public void onCreate() {
super.onCreate();

//配置ImageLoader类
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(configuration);
}
}


五. 自定义布局

1. activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<LinearLayout
android:padding="3dp"
android:orientation="horizontal"
android:layout_marginTop="6dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageViewandroid:id="@+id/image_001"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

<ImageViewandroid:id="@+id/image_002"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

<ImageViewandroid:id="@+id/image_003"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

</LinearLayout>

</LinearLayout>


2. image_one:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<ImageView
android:id="@+id/image_one"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:layout_marginTop="10dp"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>


3. image_two:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<LinearLayout
android:padding="3dp"
android:orientation="horizontal"
android:layout_marginTop="6dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/image_01"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

<ImageView
android:id="@+id/image_02"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>

</LinearLayout>


4. image_three:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<LinearLayout
android:padding="3dp"
android:orientation="horizontal"
android:layout_marginTop="6dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageViewandroid:id="@+id/image_001"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

<ImageViewandroid:id="@+id/image_002"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

<ImageViewandroid:id="@+id/image_003"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="3dp"
android:src="@mipmap/ic_launcher"/>

</LinearLayout>

</LinearLayout>


六. 最后在AndroidManifest.xml文件中设置网络请求权限;在<application>中配置自定义的ImageLoader类
name属性;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: