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

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 = {};
	
	@Override
	protected 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() {
			
			@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;
			}
		};
		
		lv.setAdapter(adapter);
		
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String 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;
}
};

扫描二维码关注公众号,回复: 3478319 查看本文章

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

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

getItemId返回的是列表项的ID。



就酱。


猜你喜欢

转载自blog.csdn.net/qq_34215717/article/details/77284901