Adapter的使用求解
打个比方:
1.aActivity里有各种商品列表,商品列表是从服务器中获取,用到Adapter,同时模拟一个商品列表(有图有文字,不显得很空白没内容,相当于Demo,图片在Drawable中获取)也用到Adapter,问题是可否使用同一个Adapter,兼顾
2.bActivity也是一个照片列表,也是从服务器中获取,内容和上面差不多,实现的功能也是一样,
3.重点是这里:aActivity和bActivity可否使用一个公共的Adapter!实现两个Activity两样不同的需求!求高手指点! 写法
public class MyListAdapter extends BaseAdapter{
private Activity activity;
private int[] type;
private AllWidget allWidget;
private LayoutInflater mInflater;
public MyListAdapter(Activity activity,int[] type){
this.activity = activity;
this.type = type;
}
@Override
public int getCount() {
return type.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null){
LayoutInflater mInflater = activity.getLayoutInflater();
convertView = mInflater.inflate(R.layout.allwidget, null);
allWidget = new AllWidget(convertView);
convertView.setTag(allWidget);
}else{
allWidget = (AllWidget) convertView.getTag();
}
//这里判断要显示什么控件
switch(type[position]){
case 0:
allWidget.getItem_text().setVisibility(View.VISIBLE);
break;
case 1:
allWidget.getItem_icon().setVisibility(View.VISIBLE);
break;
case 2:
allWidget.getItem_but().setVisibility(View.VISIBLE);
break;
}
return convertView;
}
public class AllWidget{
private TextView item_text;
private ImageView item_icon;
private Button item_but;
private View baseview;
public AllWidget(View view){
this.baseview = view;
}
public TextView getItem_text() {
item_text = (TextView)baseview.findViewById(R.id.text);
return item_text;
}
public void setItem_text(TextView item_text) {
this.item_text = item_text;
}
public ImageView getItem_icon() {
item_icon = (ImageView)baseview.findViewById(R.id.imgview);
return item_icon;
}
public void setItem_icon(ImageView item_icon) {
this.item_icon = item_icon;
}
public Button getItem_but() {
item_but = (Button)baseview.findViewById(R.id.button);
return item_but;
}
public void setItem_but(Button item_but) {
this.item_but = item_but;
}
}
}
[解决办法]
public class ListviewActivity extends Activity {
/** Called when the activity is first created. */
private ListView list;
private int[] type = {0,2,1,0,2,1,1,0};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ListView)findViewById(R.id.list);
list.setAdapter(new MyListAdapter(this,type));
}
}
[解决办法]
main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list"
android:divider="@android:color/white"
android:dividerHeight="1dp"></ListView>
</LinearLayout>
allwidget.xml文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text"
android:text="@string/app_name"
android:visibility="invisible"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="@string/app_name"
android:visibility="invisible"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imgview"
android:src="@drawable/ic_launcher"
android:visibility="invisible"/>
</FrameLayout>
[解决办法]
这个和用不用下拉刷新没有关系。就是你A setAdapter时,会new 一个Adapter, B在setAdapter时也会new 一个Adapter,这两个Adapter是一个类文件,但是在程序中其实是有两个实例的,所以不会影响你的。
public MyListAdapter(Activity activity,int[] type){
this.activity = activity;
this.type = type;
}
有一个人写了几句,其实用实例化MyListAdapter的时候,将activity和type(数据源)都已经传过来了。所以,如果只是数据源不一样,UI一样,完全可以用一个Adapter.你应该动手写写,不要老等别人写好的代码,呵呵,加油
