• Android ListView 自定义适配器


    ListView 自定义适配器 网上查了有很多,在此记录一下。

    ListView绑定数据显示,实现效果如下:

    一、定义一个布局文件checkvouch_unverify_item.xml 作为视图

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal" >
    
        <!-- id -->
    
        <TextView
            android:id="@+id/id"
            android:textSize="40sp"
            android:gravity="center"
            android:layout_width="55dp"
            android:layout_height="match_parent" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:orientation="vertical"
            >
    
            <TextView
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <!-- cMaker -->
    
            <TextView
                android:id="@+id/cMaker"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <!-- dAddDate -->
    
            <TextView
                android:id="@+id/dAddDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <!-- cVerify -->
    
        <TextView
            android:id="@+id/cVerifyStatus"        
            android:layout_weight="1"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
        <!-- cVerifyDate -->
    
        <!-- Button设置为没有焦点 -->
        <Button
            android:id="@+id/btnVerify"  
            android:focusable="false"     
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/btn_Verify" />
    
    </LinearLayout>

    二、自定义适配器类继承BaseAdapter

    /**
         * 自定义ListView适配器
         * @author zhenyun
         *
         */
        private class CheckListAdapter extends BaseAdapter
        { 
            private List<CheckVouch> list=null;
            private Context context=null;
            public CheckListAdapter(List<CheckVouch> list,Context context)
            {
                super();
                this.list= list;
                this.context = context;
            }
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return list.size();
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return list.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return list.get(position).getId();
            }
    
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                ViewHolder item = null;
                if(convertView ==null)
                {
                    convertView = LayoutInflater.from(context).inflate(R.layout.checkvouch_unverify_item, null);
                    item = new ViewHolder();
                    item.id= (TextView) convertView.findViewById(R.id.id);
                    item.name= (TextView) convertView.findViewById(R.id.name);
                    item.cMaker= (TextView) convertView.findViewById(R.id.cMaker);
                    item.dAddDate= (TextView) convertView.findViewById(R.id.dAddDate);
                    item.cVerifyStatus= (TextView) convertView.findViewById(R.id.cVerifyStatus);
                    item.btnVerify= (Button) convertView.findViewById(R.id.btnVerify);
                    convertView.setTag(item);//绑定ViewHolder对象  
                }
                else
                {
                    item = (ViewHolder) convertView.getTag();//取出ViewHolder对象
                }
                /**设置TextView显示的内容,即我们存放在动态数组中的数据*/ 
                item.id.setText(String.valueOf(list.get(position).getId()));
                item.name.setText(list.get(position).getName());
                item.cMaker.setText(list.get(position).getcMaker());
                item.dAddDate.setText(DateUtils.DateToString(list.get(position).getdAddDate(),"yyyy-MM-dd"));
                item.cVerifyStatus.setText(list.get(position).getcVerify().equals("")?"未审":"已审");
                /**
                 * 设置按钮点击事件
                 */
                item.btnVerify.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        Log.i("---->","你点击了按钮:"+getItemId(position));
                    }
                });
                
                return convertView;
            }
            
        }
        
        /**
         * 存储控件
         * @author zhenyun
         *
         */
        public class ViewHolder
        {
            public TextView id;
            public TextView name;
            public TextView cMaker;
            public TextView dAddDate;
            public TextView cVerifyStatus;
            public Button btnVerify;        
        }

    三、获取数据集合、绑定显示列表(MainActivity)

    1\activity_main.xml布局文件

    <?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="vertical" >
    
        
    
        <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        </ListView>
    
    </LinearLayout>

    2、MainActivity类代码

    public class MainActivity extends Activity {
        private ListView listView;
        private ProgressDialog dialog;
        //获取数据集合
        private List<CheckVouch> list = new ArrayList<CheckVouch>();
    
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(android.os.Message msg) {
                ListResult<CheckVouch> result = (ListResult<CheckVouch>) msg.obj;
                if (result.getResult() == 1) {
                    CheckListAdapter adapter = new CheckListAdapter(result.getList(), MainActivity.this);
                    
                    listView.setAdapter(adapter);
                } else {
                    Toast.makeText(getApplicationContext(), result.getMessage(),
                            Toast.LENGTH_LONG);
                }
                dialog.dismiss();
            };
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            //设置标题
            setTitle(R.string.uncheck_titile);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = (ListView) this.findViewById(R.id.listView);
            dialog = new ProgressDialog(this);
            dialog.setTitle("提示");
            dialog.setMessage("正在查询...");
    
            dialog.show();
            new Thread(new SearchThread()).start();
    
        }
        @Override
        public void setTitle(CharSequence title) {
            // TODO Auto-generated method stub
            //super.setTitle(R.string.uncheck_titile);
            super.setTitle(title);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
            // return super.onCreateOptionsMenu(menu);
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        private class SearchThread implements Runnable {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                ListResult<CheckVouch> result = Common.getInstance()
                        .checkvouch_SelectList();
    
                Message msg = Message.obtain();
                msg.obj = result;
    
                handler.sendMessage(msg);
            }
    
        }
    }

    我读取的是网络数据,必须开启一个新的线程,所以放在handler中处理显示的数据。

  • 相关阅读:
    Vue:Axios异步通信,生命周期
    关于Hibernate多对多关联关系的更新问题。
    Hibernate多对多关联关系
    使用JQuery做一组复选框的功能。
    如何用jstl的select标签做二级联动下拉列表框??
    Ajax回退刷新页面问题的解决办法
    如何遍历一个JSON对象的属性值???
    一个关于JSON的异常,获取List对象失败的。。。
    阅读HandlerInterceptor接口源码的理解
    阅读HandlerInterceptor接口源码的理解
  • 原文地址:https://www.cnblogs.com/tianzhenyun/p/3559211.html
Copyright © 2020-2023  润新知