您现在的位置: 主页 > 嵌入式操作系统 > Android > AndroidListView
本文所属标签:
为本文创立个标签吧:

AndroidListView

来源:android 网络用户发布,如有版权联系网管删除 2018-08-22 

ListView的三种适配器

ArrayAdapter 支持list集合,只能展现一行文字

SimpleAdapter 具有扩展性,可以自定义多种效果

BaseAdapter 抽象类,继承这个类并且重写相关方法

常用属性

android:divider 设置分割线的颜色或图片

android:divider 分割线

android:scrollbars="none" 不显示滚动条

android:fadingEdge="none" 去掉上边和下边黑色的阴影

android:fastScrollEnable="true" 设置快速滚动

android:drawSelectorOnTop="true" 设置长按试背景色高亮

android:stackFromBottom="true" 显示列表在最下面

android:cacheColorHint=“#000000” 设置背景时消除拖动的黑色阴影

android:headerDividersEnabled=“false” 不会在页眉画分割线

android:footerDividersEnabled=“false” 不会在页脚画分割线

android:descendantFocusability="blocksDescendants" 给子view设置,取消子控件的焦点

ArrayAdapter

1.系统自带布局

simple_list_item_1: 单独一行的文本框,常用

simple_list_item_2: 两个文本框组成

simple_list_item_checked: 每项都是由一个已选中的列表项慎用

imple_list_item_multiple_choice: 都带有一个复选框慎用

simple_list_item_single_choice: 都带有一个单选钮慎用

setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL) 设置多选状态慎用

2.实例

listview.setAdapter(new ArrayAdapter(this,                android.R.layout.simple_list_item_multiple_choice,new String[]{"元旦","清明","劳动节","端午节","中秋节"}));

SimpleAdapter

List> mList = new ArrayList>();for (int i = 0; i < idCard.length; i++) {        Map map = new HashMap();        map.put("name", idCard[i]);        map.put("sex",  "sex"+i);        map.put("number","number"+i);        list.add(map);}SimpleAdapter adapter = new SimpleAdapter(this, mList,                       R.layout.item_listview, new String[] { "name", "sex","number" }, 
              newint[] {R.id.listview_item_name,R.id.listview_item_sex,R.id.listview_item_number });

自定义BaseAdapter模板

class MyAdapter extends BaseAdapter {    private Context context = null;    public MyAdapter(Context context) {            this.context = context;    }    @Override    public int getCount() {            return list.size();    }    @Override    public Object getItem(int position) {            return list.get(position);    }    @Override    public long getItemId(int position) {            return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder mHolder;            if (convertView == null) {                    mHolder = new ViewHolder();                    LayoutInflater inflater = LayoutInflater.from(context);                    convertView = inflater.inflate(R.layout.item_listview, null, true);                    mHolder.text_item_listview_username = (TextView) convertView.findViewById(R.id.listview_item_name);                    mHolder.text_item_listview_email = (TextView) convertView.findViewById(R.id.listview_item_sex);                    mHolder.imageView_item_listview_headpic = (ImageView) convertView.findViewById(R.id.listview_item_number);                    convertView.setTag(mHolder);            } else {                    mHolder = (ViewHolder) convertView.getTag();            }            String name = list.get(position).get("name").toString();            String sex = list.get(position).get("sex").toString();            String number = list.get(position).get("number").toString();

       mHolder.listview_item_name.setText(name); mHolder.listview_item_sex.setText(sex); mHolder.listview_item_number.setText(number); return convertView; } class ViewHolder { private TextView listview_item_name; private TextView listview_item_sex; private TextView listview_item_number; }}

实现上拉刷新功能的ListView

1.自定义Adapter

public class MyListView extends ListView implements OnScrollListener{        private FootLayout flayout;    private Scroller scroller;    private ListViewListener lvListener;    private float mlastY;    private int itemConut=-1;    private int PULL_LOAD_MORE_DELTA=150;    private int SCROLL_DURATION=400;    public MyListView(Context context) {        super(context);        initView(context);        // TODO Auto-generated constructor stub    }    public MyListView(Context context, AttributeSet attrs) {        super(context, attrs);        initView(context);        // TODO Auto-generated constructor stub    }    public MyListView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        initView(context);        // TODO Auto-generated constructor stub    }    public void initView(Context context){        super.setOnScrollListener(this);        scroller=new Scroller(context, new DecelerateInterpolator());        flayout= new FootLayout(context);        flayout.setState(FootLayout.STATE_NO);        flayout.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                // TODO Auto-generated method stub                statrView();            }        });    }    @Override    public void setAdapter(ListAdapter adapter) {        // TODO Auto-generated method stub        addFooterView(flayout);        super.setAdapter(adapter);    }    public void statrView(){        flayout.setState(FootLayout.STATE_LOADING);        if(lvListener!=null){            lvListener.onLoadMore();        }    }    public void stopView(){        flayout.setState(FootLayout.STATE_NO);    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        // TODO Auto-generated method stub        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                mlastY=ev.getRawY();                break;            case MotionEvent.ACTION_MOVE:                final float deltaY=ev.getRawY()-mlastY;                mlastY=ev.getRawY();                if(getLastVisiblePosition()==itemConut-1){                    updateFooterHeight(-deltaY);                }                break;            default:                if (getLastVisiblePosition() == itemConut - 1) {                                        // 调用加载更多                    if (flayout.getBottomMargin() > PULL_LOAD_MORE_DELTA) {                        statrView();// 如果底部视图高度大于可以加载高度,那么就开始加载                    }                    resetFooterHeight();// 重置加载更多视图高度                }                break;        }        return super.onTouchEvent(ev);    }    private void updateFooterHeight(float arg0){        int height=flayout.getBottomMargin()+(int)arg0;            if (height > PULL_LOAD_MORE_DELTA) {                 flayout.setState(FootLayout.STATE_READY);            } else {                flayout.setState(FootLayout.STATE_NO);            }        flayout.setBottomMargin(height);    }    private void resetFooterHeight() {        int bottomMargin = flayout.getBottomMargin();        if (bottomMargin > 0) {            scroller.startScroll(0, bottomMargin, 0, -bottomMargin,                    SCROLL_DURATION);            invalidate();        }    }    @Override    public void computeScroll() {        if (scroller.computeScrollOffset()) {            flayout.setBottomMargin(scroller.getCurrY());            postInvalidate();        }        super.computeScroll();    }    public interface ListViewListener {        public void onLoadMore();    }    public void setListViewListener(ListViewListener l) {        lvListener=l;    }    @Override    public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {        // TODO Auto-generated method stub        itemConut=arg3;    }    @Override    public void onScrollStateChanged(AbsListView arg0, int arg1) {        // TODO Auto-generated method stub    }    }

2.底部FootLayout

public class FootLayout extends LinearLayout{    static int STATE_READY=0,STATE_LOADING=1,STATE_NO=2;    private RelativeLayout rlayout;    private TextView tv;    private ProgressBar pb;    public FootLayout(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        // TODO Auto-generated constructor stub        initView(context);    }    public FootLayout(Context context) {        super(context);        // TODO Auto-generated constructor stub        initView(context);    }    public void initView(Context context){        LinearLayout layout=(LinearLayout) LayoutInflater.from(context).inflate(R.layout.foot_view, null);        addView(layout);        layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,             LayoutParams.WRAP_CONTENT));        rlayout=(RelativeLayout) layout.findViewById(R.id.foot_rlayout);        tv=(TextView) layout.findViewById(R.id.foot_text);        pb=(ProgressBar) layout.findViewById(R.id.foot_progressbar);    }    public void hide(){        rlayout.setVisibility(View.VISIBLE);    }    public void show(){        rlayout.setVisibility(View.INVISIBLE);    }    public void setState(int state){        tv.setVisibility(View.INVISIBLE);        pb.setVisibility(View.INVISIBLE);        if(state==STATE_READY){            tv.setVisibility(View.VISIBLE);            tv.setText("松开显示更多");        }else if(state==STATE_LOADING){            pb.setVisibility(View.VISIBLE);        }else{            tv.setVisibility(View.VISIBLE);            tv.setText("加载更多");        }    }    public void setBottomMargin(int height) {        if (height < 0)            return;        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) rlayout                .getLayoutParams();        lp.bottomMargin = height;        rlayout.setLayoutParams(lp);    }    public int getBottomMargin() {        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) rlayout                .getLayoutParams();        return lp.bottomMargin;    }}

3.底部FootLayout的布局

    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <RelativeLayout         android:id="@+id/foot_rlayout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        >        <TextView             android:id="@+id/foot_text"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="加载更多"            android:layout_centerInParent="true"            />        <ProgressBar             android:id="@+id/foot_progressbar"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:verticalScrollbarPosition="defaultPosition"            android:visibility="invisible"            />                    

4.使用MyListView

public class MainActivity extends Activity implements IXListViewListener{    private ListViews mylists;    private SimpleAdapter mAdapter;    private List> mlist;    private Handler mHandler;       @Override      protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);          mylists =(ListViews) findViewById(R.id.myListView);        mlist=new ArrayList>();        mAdapter = new SimpleAdapter(MainActivity.this, getData(),                R.layout.list_item, new String[] { "name", "img", "content" },                new int[] { R.id.title, R.id.mImage, R.id.content });        mylists.setAdapter(mAdapter);        mylists.setPullLoadEnable(true);        mylists.setXListViewListener(this);        mHandler = new Handler();    }    String data[] = new String[] { "勇士", "火箭", "湖人",            "凯尔特人", "雷霆" };    String data1[] = new String[] { "汤普森", "哈登", "詹姆斯",            "塔图姆", "维斯布鲁克" };    private List> getData() {        for (int i = 0; i < data.length; i++) {            Map map = new HashMap();            map.put("name", data[i]);            map.put("content", data1[i]);            map.put("img", R.drawable.ic_launcher);            mlist.add(map);        }        return mlist;    }          // 加载更多        @Override        public void onLoadMore() {            mHandler.postDelayed(new Runnable() {                @Override                public void run() {                    getData();                    mAdapter.notifyDataSetChanged();                    onLoad();                }            }, 1500);          }        private void onLoad() {            mylists.stopLoadMore();        }}



              查看评论 回复



 设置 加载 更多

"AndroidListView"的相关文章

网站地图

围观()