那些复杂的列表总要弄个清楚——(三)激动人心的BaseAdapter之一

来源:互联网 发布:淘宝店铺至尊会员 编辑:程序博客网 时间:2024/05/22 03:36

BaseAdapter,非常灵活,但比较复杂一些

由于很灵活,所以用途很广。

例如一些需要根据数据量调整列表项数目的情况就需要它了

特别是一跟服务器端结合,返回的数据量大小未知,数据内容也未知,这时候BaseAdapter能够很好地解决这个未定问题。


自己输入的数据用空格拆分后自动填充列表。


布局:

<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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.arial.listview3.MainActivity"     android:orientation="vertical">    <ListView         android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:dividerHeight="3dp"        ></ListView>    <LinearLayout         android:layout_height="wrap_content"        android:layout_width="match_parent"        android:orientation="horizontal">                <EditText             android:id="@+id/edit"        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"></EditText>                <Button             android:id="@+id/btn"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="空格拆分"/>            </LinearLayout>    </LinearLayout>

代码:
public class MainActivity extends Activity {ListView lv;EditText et;Button btn;BaseAdapter adapter;String[] ss = {};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView)findViewById(R.id.lv);et = (EditText)findViewById(R.id.edit);btn = (Button)findViewById(R.id.btn);adapter = new BaseAdapter() {@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubTextView tv = new TextView(MainActivity.this);tv.setTextSize(20);tv.setText(ss[arg0]);return tv;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn ss[arg0];}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn ss.length;}};lv.setAdapter(adapter);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubString s = et.getText().toString();ss = s.split(" ");int n = ss.length;//Toast.makeText(MainActivity.this, String.valueOf(n), Toast.LENGTH_SHORT).show();adapter.notifyDataSetChanged();}});}

主要看构造BaseAdapter的那段:

adapter = new BaseAdapter() {

@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
TextView tv = new TextView(MainActivity.this);
tv.setTextSize(20);
tv.setText(ss[arg0]);
return tv;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return ss[arg0];
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return ss.length;
}
};

需要写四个方法,最重要的是getView方法,它返回的数据是一个View,也就是你的列表项的视图,这边只是简单的写了个TextView,可以根据需要变复杂些;

getCount方法返回的数据是int类型,它返回的是你需要构造的列表项的数目;

getItemId返回的是列表项的ID。



就酱。


阅读全文
0 0