在 android开发中普通的listview不能满足我们的需要,这时我们需要自定义listivew的Item的布局以满足我们的需求。
下面假设我们要完成下面的页面布局
在上一片文章中提到使用listview_Item.xml文件自定义listview的Item的布局。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/picture"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:text="TextView" />
<TextView
android:id="@+id/introduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
ManActivity.java的实现
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView listView = null;
private MyAdapter myAdapter;
//图片资源
int[] a = new int[]{R.drawable.maaa, R.drawable.mao,
R.drawable.maoa, R.drawable.maoaa, R.drawable.maoaaa};
//创建适配器
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 5;
}//此处return几就有几个Item
@Override
public Object getItem(int position) {
return position;
}//position从零开始代表当前Item位置
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//设置listview的Item的布局
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.listview_item, null);
//将数据放入布局相应位置
TextView text = (TextView) convertView.findViewById(R.id.name);
text.setText("猫"+(position+1));
TextView text1 = (TextView) convertView.findViewById(R.id.introduce);
text1.setText("猫"+(position+1)+"简介");
ImageView imageView = (ImageView) convertView.findViewById(R.id.picture);
imageView.setImageResource(a[position]);
return convertView;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
myAdapter = new MyAdapter();
//关联适配器
listView.setAdapter(myAdapter);
}
}
顺便提一下listview的Item点击事件的设置方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//此处设置点击事件,用position定位Item设置每个Item的响应。
}
});
在开发过程中经常需要用到下啦刷新,在这部分我使用的是google官方下拉刷新空件SwipeRefreshLayout。
xml文件中的代码
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/swipeLayout" >
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</android.support.v4.widget.SwipeRefreshLayout>
MainActivity中的代码
SwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeLayout);
//设置下拉动画的颜色 SwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
android.R.color.holo_orange_light, android.R.color.holo_red_light);
SwipeRefreshLayout.setSize(SwipeRefreshLayout.DEFAULT);
SwipeRefreshLayout.setProgressViewEndTarget(true, 100);
SwipeRefreshLayout.setOnRefreshListener(new android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Thread(new Runnable() {
@Override
public void run() {
//此处设置下拉刷新需要的操作
//结束刷新
SwipeRefreshLayout.setRefreshing(false);
}
}).start();
}
});