有些时候,我们的列表是简单的,甚至单一的item,没有太多交互,但是没写一个界面都写一次adapter,实在感觉有点费事,所以必要时可以抽出来
BaseAdapter
package com.forens.xuan.forkit.adapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import com.forens.xuan.forkit.viewholder.BaseViewHolder; import java.util.List; /** * Project_Name: ForKit * Copyright: * Created: dake.xuan on 2017/4/26 10:38 * E-mail: dake.xuan@g-emall.com * Desc: */ public class ForAdapter<T> extends BaseAdapter{ private List<T> tList; private BaseViewHolder viewHolder; public ForAdapter(BaseViewHolder viewHolder) { this.viewHolder = viewHolder; } @Override public int getCount() { if (tList != null) return tList.size(); else return 0; } public void settList(List<T> tList) { this.tList = tList; } @Override public Object getItem(int position) { return tList.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { if(viewHolder!=null){ convertView=viewHolder.onViewCread(position,convertView,parent); convertView.setTag(viewHolder); viewHolder.onBindViewData(position,tList.get(position)); }else { Log.e("ForAdapter","ViewHolder is null"); } }else { BaseViewHolder viewHolder2= (BaseViewHolder) convertView.getTag(); viewHolder2.onBindViewData(position,tList.get(position)); } return convertView; } }
package com.forens.xuan.forkit.viewholder; import android.view.View; import android.view.ViewGroup; /** * Project_Name: ForKit * Copyright: * Created: dake.xuan on 2017/4/26 11:38 * E-mail: dake.xuan@g-emall.com * Desc: */ public abstract class BaseViewHolder<T> { public abstract View onViewCread(int position, View convertView, ViewGroup parent); public abstract void onBindViewData(int position,T t1); }
那么 每次写一个列表界面就只需要写一个ViewHolder
package com.forens.xuan.forkit.viewholder; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.forens.xuan.forkit.R; import com.forens.xuan.forkit.bean.BaseBean; /** * Project_Name: ForKit * Copyright: * Created: dake.xuan on 2017/4/26 11:34 * E-mail: dake.xuan@g-emall.com * Desc: */ public class TestViewHolder extends BaseViewHolder<BaseBean>{ private TextView textViewName; private Context context; public TestViewHolder(Context context) { this.context = context; } @Override public View onViewCread(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate(R.layout.item_test, parent, false); textViewName= (TextView) convertView.findViewById(R.id.tv_test_name); return convertView; } @Override public void onBindViewData(int position, BaseBean t1) { textViewName.setText(t1.getName()); } }
然后使用它
package com.forens.xuan.forkit; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import com.forens.xuan.forkit.adapter.ForAdapter; import com.forens.xuan.forkit.bean.BaseBean; import com.forens.xuan.forkit.viewholder.TestViewHolder; import java.util.ArrayList; import java.util.List; public class TestListViewActivity extends AppCompatActivity { private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_list_view); mListView= (ListView) findViewById(R.id.lv_test_listView1); ForAdapter<BaseBean> adapter=new ForAdapter<>(new TestViewHolder(this)); List<BaseBean> list=new ArrayList<>(); for (int i=0;i<10;i++){ BaseBean baseBean=new BaseBean(); baseBean.setName("名字"+i); list.add(baseBean); } adapter.settList(list); mListView.setAdapter(adapter); } }