Android之BaseAdapter从一个函数内部放到外边
模仿 参考着ArrayAdapter将BaseAdapter写成了外部类,此次内部类转化外部类的唯一难点,是参数的传递,要通过自己写的BaseAdapter的构造函数将MainActivity的参数传递给外部类,通过外部类的返回值传递给插件,具体函数还是那些,但是多了一个构造函数。
package com.example.fouradpater_3;import java.util.List;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Filter;import android.widget.Filterable;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;public class MyAdapter<T> extends BaseAdapter {private LayoutInflater mInflater;private Context mContext;private int mResource;private int mDropDownResource;private List<T> mList; private void init(Context context, int resource, List<T> objects) { mContext = context; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mResource = mDropDownResource = resource; mList = objects; } //重写构造函数,将List与Adapter关联public MyAdapter(Context context, int textViewResourceId, List<T> objects) {init(context, textViewResourceId, objects);}//获取list数量@Overridepublic int getCount() {return mList.size();}//获取某个地址的数值@Overridepublic Object getItem(int position) {return mList.get(position);}//获取指定地址@Overridepublic long getItemId(int position) {return position;}//从过度的view中获取view@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView text;ImageView imgview;RelativeLayout rLayout; if (convertView == null) { rLayout = (RelativeLayout) mInflater.inflate(R.layout.new_file, parent, false); Log.d("com.example.listadpater_text.MainActivity","pos = "+ position +"new"); } else { rLayout = (RelativeLayout) convertView; Log.d("com.example.listadpater_text.MainActivity","pos = "+ position +"old"); }String item = (String) getItem(position);text = (TextView) rLayout.findViewById(R.id.TextView2);text.setText(item);imgview = (ImageView) rLayout.findViewById(R.id.ImageView1);imgview.setImageResource(R.drawable.ic_launcher);return rLayout;}}?package com.example.fouradpater_3;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.widget.Adapter;import android.widget.Gallery;import android.widget.GridView;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Spinner;import android.widget.SpinnerAdapter;public class MainActivity extends Activity {private String[] mad = {"4","3","2","1"};private List<String> mList;private Spinner mSpinner;private GridView mGridView;private Gallery mGallery;private ListView mListView;private Adapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); mList = new ArrayList<String>(); for(int i = 0; i<mad.length; i++){mList.add(mad[i]); }//利用自己写的外部类传递进去参数mAdapter = new MyAdapter<String>(this,R.layout.new_file,mList);mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);//mInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//mInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mSpinner = (Spinner) findViewById(R.id.spinner1);mGridView = (GridView) findViewById(R.id.gridView1);mGallery = (Gallery) findViewById(R.id.gallery1);mListView = (ListView) findViewById(R.id.listView1);mSpinner.setAdapter((SpinnerAdapter) mAdapter);mGridView.setAdapter((ListAdapter) mAdapter);mGallery.setAdapter((SpinnerAdapter)mAdapter);mListView.setAdapter((ListAdapter) mAdapter);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}?