之前一直困扰listview刷新后位置的问题,现在才明白,原来不能重新设置listview的adapter,而应该用notifyDataSetChanged()来刷新,这样位置就不会置顶。
package com.TestAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class TestAdapter extends Activity {
/** Called when the activity is first created. */
private int[] images ;
private ListView listview;
private MyAdapter adapter;
List<Map<String,Integer>> al;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
images = new int[]{android.R.drawable.ic_btn_speak_now,
android.R.drawable.alert_light_frame,
android.R.drawable.arrow_down_float,
android.R.drawable.arrow_up_float,
android.R.drawable.btn_star_big_off,
android.R.drawable.btn_star_big_on,
android.R.drawable.button_onoff_indicator_off,
android.R.drawable.button_onoff_indicator_on,
android.R.drawable.checkbox_off_background,
android.R.drawable.checkbox_on_background,
android.R.drawable.ic_btn_speak_now,
android.R.drawable.ic_delete};
listview = (ListView)findViewById(R.id.listview);
al = new ArrayList<Map<String,Integer>>();
for(int i=0; i<12; i++){
HashMap<String,Integer > map = new HashMap<String,Integer>();
map.put(""+i, images[i]);
al.add(map);
}
adapter = new MyAdapter(this, al, R.layout.list_item, new String[]{"imageview", "tv"},
new int[]{R.id.imageview, R.id.tv});
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int count,
long arg3) {
if(adapter.getCount()==count+1){
HashMap<String ,Integer> map = new HashMap<String, Integer>();
map.put(""+(adapter.mItemList.size()), android.R.drawable.ic_dialog_email);
al.add(map);
adapter.mItemList = al;
adapter.notifyDataSetChanged();
Toast.makeText(TestAdapter.this, "正在刷新", Toast.LENGTH_SHORT).show();
}
}
});
}
private class MyAdapter extends SimpleAdapter{
int count = 0;
private List<Map<String, Integer>> mItemList;
public MyAdapter(Context context, List<? extends Map<String, Integer>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
mItemList = (List<Map<String, Integer>>) data;
if(data == null){
count = 0;
}else{
count = data.size();
}
}
public int getCount() {
return mItemList.size();
}
public Object getItem(int pos) {
return pos;
}
public long getItemId(int pos) {
return pos;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Map<String ,Integer> map = mItemList.get(position);
int image = map.get(""+position);
View view = super.getView(position, convertView, parent);
ImageView imageview = (ImageView)view.findViewById(R.id.imageview);
TextView tv = (TextView)view.findViewById(R.id.tv);
imageview.setBackgroundResource(image);
tv.setText(""+position);
return view;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<TextView
android:id="@+id/tv" android:layout_width="fill_parent"
android:layout_height="wrap_content"
></TextView>
</LinearLayout>
posted @ 2012-02-06 17:08 橫龙村夫 阅读(1706) 评论(0)
编辑
实现原理:在onItemSelected事件中,选中galerry中的图片时,把选中的图片放大,把没有选中的缩小。
以下是关键代码
1 public void onItemSelected(AdapterView<?> parent, View view, int position,
2 long id) {
3 // 选中Gallery中某个图像时,放大显示该图像
4 ImageView imageview = (ImageView)view;
5 ((ImageView) view).setImageDrawable((Drawable) product_image_list.get(position));
6 view.setLayoutParams(new Gallery.LayoutParams(520 / 2, 318 / 2));
7 title.setText((String)product_title.get(position));
8 info.setText((String)product_info.get(position));
9 for(int i=0; i<parent.getChildCount();i++){
10 //缩小选中图片旁边的图片
11 ImageView local_imageview = (ImageView)parent.getChildAt(i);
12 if(local_imageview!=imageview){
13 local_imageview.setLayoutParams(new Gallery.LayoutParams(520/4, 318/4));
14 local_imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
15 }
16 }
17 }
18
19 public void onNothingSelected(AdapterView<?> parent)
20 {
21 }
22
23 public class ImageAdapter extends BaseAdapter
24 {
25 int mGalleryItemBackground;
26 private Context mContext;
27
28 public ImageAdapter(Context context)
29 {
30 mContext = context;
31 // TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
32 // mGalleryItemBackground = typedArray.getResourceId(
33 // R.styleable.Gallery_android_galleryItemBackground, 0);
34 }
35
36 public int getCount()
37 {
38 return product_image_list.size();
39 }
40
41 public Object getItem(int position)
42 {
43 return position;
44 }
45
46 public long getItemId(int position)
47 {
48 return position;
49 }
50
51 public View getView(int position, View convertView, ViewGroup parent)
52 {
53 ImageView imageView = new ImageView(mContext);
54 imageView.setLayoutParams(new Gallery.LayoutParams(520/4, 318/4));//默认都是大图
55 imageView.setImageDrawable((Drawable) product_image_list.get(position));
56 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
57 return imageView;
58 }
59 }
posted @ 2012-02-06 11:20 橫龙村夫 阅读(364) 评论(0)
编辑