无聊的时候就只有学习学习再学习,周末天太热,无处可去就只有在家看书了,以前没有注意过在listview的适配过程中,没有数据时的情况,今天翻书的过程中偶尔发现liistview在没有数据的时候是可以设置空view来和用户进行交互的,可以根据需要设置成更加有趣味的交互行为哦。下面上代码:
public class MainActivity extends Activity {
ArrayList list = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = (ListView) findViewById(R.id.list);
TextView textView = (TextView) findViewById(R.id.tv);
final MyAdapter adapter = new MyAdapter(this,list);
listView.setAdapter(adapter);
if (list.size() == 0){
listView.setEmptyView(textView);
list.add("111111111");
list.add("22222222222");
list.add("3333333333");
list.add("44444444444");
textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
adapter.notifyDataSetChanged();
}
});
}
}
class MyAdapter extends BaseAdapter{
private ArrayList list;
private Context context;
MyAdapter(Context context,ArrayList list){
this.list = list;
this.context = context;
};
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
convertView = LinearLayout.inflate(context,R.layout.row_item_layout,null);
holder.left = (ImageView) convertView.findViewById(R.id.left);
holder.right = (ImageView) convertView.findViewById(R.id.right);
holder.textView = (TextView) convertView.findViewById(R.id.list_tv);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).toString());
return convertView;
}
}
class ViewHolder {
ImageView left;
ImageView right;
TextView textView;
}
}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.example.mhyuam.emptyadapterview.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World!"
android:visibility="gone"/>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
下面的是一个自定义的drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#EFEFEF"
android:endColor="#000000"
android:angle="225"
android:type="linear"/>
</shape>
很容易理解,android:shape="rectangle"表示的是自定义的drawable的形状,下面是开始颜色和结束颜色,android:angle="225"表示的是渐变的方向,android:type="linear"线性渐变,其中还有一个属性android:centerColor="",这个就不言而喻了吧。