import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.jokey.listview.adapter.CommonAdapter;
import com.jokey.listview.adapter.CommonViewHolder;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ImageView ivImageViewNoData;
private ListView lvListView;
private MyAdapter mAdapter;
private List<String> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
ivImageViewNoData = (ImageView) findViewById(R.id.iv_imageView_noData);
lvListView = (ListView) findViewById(R.id.lv_listView);
mList = new ArrayList<>();
lvListView.setAdapter(mAdapter = new MyAdapter(this, mList, R.layout.item_listview));
// 无数据时显示该View
lvListView.setEmptyView(ivImageViewNoData = (ImageView) findViewById(R.id.iv_imageView_noData));
addItem();
}
private void addItem() {
for (char i = 'a'; i <= 'z'; i++) {
mList.add("" + i);
}
mAdapter.notifyDataSetChanged();
}
private class MyAdapter extends CommonAdapter<String> {
private List<String> mListData;
public MyAdapter(Context context, List<String> listDatas, int layoutId) {
super(context, listDatas, layoutId);
this.mListData = listDatas;
}
@Override
protected void fillData(CommonViewHolder holder, int position) {
String text = mListData.get(position);
((TextView)holder.getView(R.id.textView)).setText(text);
}
}
}
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CommonAdapter<T> extends BaseAdapter {
private Context context;
private List<T> listDatas;
private int layoutId;
public CommonAdapter(Context context, List<T> listDatas, int layoutId) {
super();
this.context = context;
this.listDatas = listDatas;
this.layoutId = layoutId;
}
@Override
public int getCount() {
return this.listDatas == null ? 0 : this.listDatas.size();
}
@Override
public Object getItem(int position) {
return this.listDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
CommonViewHolder holder = CommonViewHolder.getViewHolder(this.context, convertView, parent, this.layoutId);
this.fillData(holder, position);
return holder.getMConvertView();
}
/**
* 抽象方法,用于子类实现,填充数据
*
* @param holder
* @param position
*/
protected abstract void fillData(CommonViewHolder holder, int position);
}
import android.content.Context;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class CommonViewHolder {
private SparseArray<View> mViews;
private View mConvertView;
public CommonViewHolder(Context context, ViewGroup parent, int layoutId) {
mViews = new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, null);
mConvertView.setTag(this);
}
public static CommonViewHolder getViewHolder(Context context,
View convertView, ViewGroup parent, int layoutId) {
if (convertView == null)
return new CommonViewHolder(context, parent, layoutId);
return (CommonViewHolder) convertView.getTag();
}
@SuppressWarnings("unchecked")
public <T extends View> T getView(int viewId) {
View item = mViews.get(viewId);
if (item == null) {
item = mConvertView.findViewById(viewId);
mViews.put(viewId, item);
}
return (T) item;
}
public View getMConvertView() {
return mConvertView;
}
}