ListView组件的应用很频繁,在一般目录和微博经常见到。总的来说不是很难,但是小的细节必需注意,不然就会出现我以下不协调的问题:
一 布局
(1)activity_main.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" >
<ListView
android:id="@+id/mylistview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ListView>
</LinearLayout>
(2)list.xml:(list布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/myimagebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
>
<TextView
android:id="@+id/username"
android:layout_width="50dp"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/time"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:gravity="right"
/>
</LinearLayout>
<TextView
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
二 方法:
MainActivity.java文件:
public class MainActivity extends Activity {
List<Map<String, String>> listdata;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) this.findViewById(R.id.mylistview);
listView.setAdapter(new ImageAdapter(this));
View view = this.findViewById(android.R.id.title);
}
private class ImageAdapter extends BaseAdapter {
Context context;
String[] str = new String[] { "朱七七", "沈浪", "白飞飞", "王怜花", "穆念慈", "赵敏",
"杨过", "小龙女", "陈家洛", "熊猫儿" };
String[] time = new String[] { "一分钟前", "二分钟前", "三分钟前", "四分钟前", "五分钟前",
"30分钟前", "31分钟前", "40分钟前", "45分钟前", "52分钟前" };
String[] content = new String[] { "心情愉快……", "心情郁闷……", "嘻嘻,好高兴哦!",
"哈哈,谁都骗不过我!", "嘿嘿,你好啊,好看不啊?", "乖乖,听话啊!", "黯然销魂掌……", "我在绝情谷底",
"反清复明", "好酒要天天有,天天喝!" };
int[] imageid = new int[] { R.drawable.b, R.drawable.a, R.drawable.c,
R.drawable.d, R.drawable.e, R.drawable.f, R.drawable.g,
R.drawable.h, R.drawable.j, R.drawable.l };
public ImageAdapter(Context context) {
this.context = context;
}
// 返回图片的个数
@Override
public int getCount() {
return str.length;
}
@Override
public Object getItem(int position) {
return str[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// View的findViewById()方法也是比较耗时的,因此需要考虑中调用一次,之后用
// View的getTag()来获取这个ViewHolder对象
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.list, null);
holder.imageButton = (ImageButton) convertView
.findViewById(R.id.myimagebutton);
holder.username = (TextView) convertView
.findViewById(R.id.username);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.content = (TextView) convertView
.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageButton.setImageResource(imageid[position]);
holder.username.setText(str[position]);
holder.time.setText(time[position]);
holder.content.setText(content[position]);
return convertView;
}
}
// 增加这样一个静态类,缓存一下,这样不用每次都重新加载
final class ViewHolder {
public ImageButton imageButton;
public TextView username;
public TextView time;
public TextView content;
}
}
注意:
1)划线部分在编程过程中曾出现在R文件中找不到图片文件,原因是xml文件名不能是大写。虽然在书写时不会提示错误,但是在R根文件中不能保存。经过改正xml文件名的书写,很快就在R文件中找到图片文件了。
2)上述斜体部分是改完后的代码,代码变化不大,但图片大小问题,影响很大,如图:
初始图:
图片大的占用文字显示了啊,换几张图片,顺便改改内容,看看最后结果吧:
是不是好看不少啊!图片也是布局的一部分,不容小视哦!!!