package com.bwie.moreitem_lv_demo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
String url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/0";
private ListView lv;
private ImageLoader imageLoaderInstance;
private MAdapter mAdapter;
List<Goods.DataBean> list = new ArrayList<>(); //大集合
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
imageLoaderInstance = ImageLoader.getInstance();
initData();
mAdapter = new MAdapter();
lv.setAdapter(mAdapter);
}
private void initData() {
//这个过程是在子线中,请求网络比较慢,有可能8秒;
new MAsyncTask().execute(url);
}
/**
*
*/
private class MAdapter extends BaseAdapter {
//伪代码
//你有几种条目类型?(1:文字, 2:图片+文字)
//不同的条目类型其实就是不同view
// 调用getView的时候,我应该返回那种条目,总要有一个判断条件
/**
*
* @return 共有多少种条目类型
*/
@Override
public int getViewTypeCount() {
//我一共有 两种条目类型
return 2;
}
/**
* 奇数条 返回 文字
* 偶数条 返回 图片加文字
* 获取条目视图类型
* @param position
* @return 0代表偶数条 , 1代表技术条;
*
*
* 返回值的int 值 只能从0开始排 0 ,1,3,4,5
*
*/
@Override
public int getItemViewType(int position) {
return position % 2; //对2取余,返回值是0 或者1
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int viewType = getItemViewType(i);//得到的是0或者1
switch(viewType){
case 0: //偶数条目 返回文字+图片条目;
ViewHolder0 viewHolder0 =null;
if (view == null) {
viewHolder0 = new ViewHolder0();
view = View.inflate(MainActivity.this, R.layout.lv_item_00, null);
viewHolder0.textView1 = view.findViewById(R.id.textView1);
viewHolder0.textView2 = view.findViewById(R.id.textView2);
viewHolder0.imageView = view.findViewById(R.id.imageView);
view.setTag(viewHolder0);
}else {
viewHolder0 = (ViewHolder0) view.getTag();
}
viewHolder0.textView1.setText(list.get(i).getNews_id());
viewHolder0.textView2.setText(list.get(i).getNews_title());
imageLoaderInstance.displayImage(list.get(i).getPic_url(),viewHolder0.imageView);
break;
case 1: // 奇数条,只返回文字条目
ViewHolder1 viewHolder1 =null;
if (view == null) {
viewHolder1 = new ViewHolder1();
view = View.inflate(MainActivity.this, R.layout.lv_item_11, null);
viewHolder1.tv1 = (TextView) view.findViewById(R.id.tv1);
viewHolder1.tv2 = (TextView) view.findViewById(R.id.tv2);
view.setTag(viewHolder1);
}else {
viewHolder1 = (ViewHolder1) view.getTag();
}
viewHolder1.tv1.setText(list.get(i).getNews_id());
viewHolder1.tv1.setText(list.get(i).getNews_title());
break;
}
return view;
}
@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;
}
}
private class MAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
return NetWordUtils.getNetjson(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
Goods goods = gson.fromJson(s, Goods.class);
List<Goods.DataBean> dataTemp = goods.getData();
list.addAll(dataTemp);
Log.e("wzq",list.size()+"");
//更新适配器
mAdapter.notifyDataSetChanged();
}
}
private class ViewHolder0 {
private TextView textView1;
private TextView textView2;
private ImageView imageView;
}
private class ViewHolder1 {
private TextView tv1;
private TextView tv2;
}
}
----------------------------------------------------------------------------------------------
布局文件
<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=".MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:divider="@color/colorAccent"
android:dividerHeight="1dp"
/>
</RelativeLayout>