Android学习第八天----ArrayAdapter
创建ListView的方式有好多种,其中需要使用到两个方法,一个是ArrayAdapter,另一个是SimpleAdapter。通过查看API可以发现一个很有意思的事情,两个方法都继承自BaseAdapter 实现了ListAdapter接口。既然两个都继承了一样的接口,那么为什么不直接使用baseAdapter,而要使用它的两个继承类?
从ArrayAdapter先来看下面的例子:
xml文件
<LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
接下来是自定义的xml文件
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textviewid" android:layout_width="match_parent" android:layout_height="wrap_content" />
接下来是java代码
import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String [] mInfo={"aaaa","bbbb","ddddd"}; ListView mListView=(ListView)findViewById(R.id.listView1); ListAdapter mListAdapter= new MyBaseAdapter(this, R.layout.activity_main_lv, mInfo); mListView.setAdapter(mListAdapter); } }
自己重写的继承自BaseAdapter的类:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyBaseAdapter extends BaseAdapter{ private Context mContext; private int mResourceTextView; private String [] mString; public MyBaseAdapter(Context mContext, int mResourceTextView, String[] mString) { super(); this.mContext = mContext; this.mResourceTextView = mResourceTextView; this.mString = mString; } @Override public int getCount() {return mString.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //XML 文件解析器 LayoutInflater layoutInflater = LayoutInflater.from(mContext); TextView mTextView=(TextView)layoutInflater.inflate(mResourceTextView, null); mTextView.setText(mString[position]); return mTextView; } }
这样就可以实现自己定义的方法,通过自己定义的方法来实现listview。
以上的方法中,layoutinflater layoutinflater = layoutInflater.from(mContext);
该功能是获取到从mainActivity传来的xml文件并解析它,然后再获取布局文件当中的textview,然后再对textview进行赋值即可。position表示的是数组的长度