android 个人学习笔记------------GridView&ListView
来源:互联网 发布:华为系统优化 编辑:程序博客网 时间:2024/05/16 07:20
MainActivity
package com.sjm.gridviewAndListview;import com.sjm.expandableListview.ExpandableListviewActivity;import com.sjm.gridview.R;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;/** * gridView组件+listView组件 * * listview优化: * * 1、使用固定的宽高,便面内容的变化导致重复渲染 * * 2、使用convertView减少内存的消耗 * * 3、使用viewHolder减少对象的查找 * * @author sjm * */public class MainActivity extends Activity { private GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView) findViewById(R.id.gridView); gridView.setAdapter(new MyAdapter(this)); gridView.setOnItemClickListener(new OnItemClickListener() { /** * parent:girdView * * view:item布局 * * position:位置----->坐标从0开始 * * id:编号 */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView tv_item = (TextView) view.findViewById(R.id.tv_item); String itemValue = tv_item.getText().toString(); if (itemValue.equals("红包")) { Intent intent = new Intent(MainActivity.this, ListViewActivity1.class); startActivity(intent); } else if (itemValue.equals("查询")) { Intent intent = new Intent(MainActivity.this, ListViewActivity2.class); startActivity(intent); } else if (itemValue.equals("基金")) { Intent intent = new Intent(MainActivity.this, ListViewActivity3.class); startActivity(intent); } else if (itemValue.equals("商城")) { Intent intent = new Intent(MainActivity.this, ListViewNotifyDataSetChanged.class); startActivity(intent); }else if (itemValue.equals("国债")) { Intent intent = new Intent(MainActivity.this, ExpandableListviewActivity.class); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "选择了第" + (id + 1) + "张图片-----" + "值为:" + itemValue, Toast.LENGTH_LONG).show(); } } }); } /** * 自定义适配器------>继承BaseAdapter * * @author sjm * */ static class MyAdapter extends BaseAdapter { private Context context; private MyAdapter(Context context) { this.context = context; } private int[] images = { R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, // R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, // R.drawable.sample_thumb_2, // R.drawable.sample_thumb_3, R.drawable.sample_thumb_4, // R.drawable.sample_thumb_5, // R.drawable.sample_thumb_6, R.drawable.sample_thumb_7 }; private String[] appNames = { "转账", "查询", "金融", "基金", "国债", "贷款", "信用卡", "商城", "充值", "提款", "红包", "贷款", "转账", "查询", "金融", "基金", "国债", "红包", "转账", "查询", "金融", "基金", "国债", "贷款" }; @Override public int getCount() { // TODO 数据的长度 return images.length;// or appNames.length } @Override public Object getItem(int position) { // TODO 获取每一个选项 return appNames[position]; } @Override public long getItemId(int position) { // TODO 每一个选项的id,直接使用position return position; } /** * convertView:减少对面的创建 * * ViewHolder:查询id,避免已经存在的时候重复查找 */ @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // TODO 填充数据 if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_gridview, null); holder = new ViewHolder(); holder.iv_item = (ImageView) convertView.findViewById(R.id.iv_item); holder.tv_item = (TextView) convertView.findViewById(R.id.tv_item); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // ImageView iv_item = (ImageView) // convertView.findViewById(R.id.iv_item); // TextView tv_item = (TextView) // convertView.findViewById(R.id.tv_item); holder.iv_item.setImageResource(images[position]); holder.tv_item.setText(appNames[position]); return convertView; } /** * 用于第一次查找组件,避免下一次重复查找 * * @author sjm * */ static class ViewHolder { ImageView iv_item; TextView tv_item; } }}```**ListViewActivity1**<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
package com.sjm.gridviewAndListview;import com.sjm.gridview.R;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;/** * listview 基本用法 * * @author sjm * */public class ListViewActivity1 extends Activity { private ListView lv_listview; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.listview1_layout); lv_listview = (ListView) findViewById(R.id.lv_listview); lv_listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textValue = (TextView) view; Toast.makeText(ListViewActivity1.this, "当前点击结果为:" + textValue.getText().toString(), Toast.LENGTH_LONG).show(); } }); }}```**ListViewActivity2**<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
package com.sjm.gridviewAndListview;import com.sjm.gridview.R;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;/** * ListActivity的基本用法,不需要自己写xml布局文件 * * @author sjm * */public class ListViewActivity2 extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.name, android.R.layout.simple_list_item_activated_1); setListAdapter(adapter); } /** * item点击事件 */ @Override protected void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) v).getText(), Toast.LENGTH_SHORT).show(); }}```**ListViewActivity3**<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
package com.sjm.gridviewAndListview;import com.sjm.gridview.R;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class ListViewActivity3 extends Activity { private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.listview3_layout); lv = (ListView) findViewById(R.id.lv); String arr[] = getResources().getStringArray(R.array.name); // 单选模式 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, arr); lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); // 多选模式 // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, // android.R.layout.simple_list_item_multiple_choice, arr); // lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); lv.setAdapter(adapter); }}```**ListViewNotifyDataSetChanged**package com.sjm.gridviewAndListview;import java.util.Vector;import java.util.logging.LogRecord;import com.sjm.gridview.R;import com.sjm.gridview.entity.News;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;/** * listview 分页加载 * * @author sjm * */public class ListViewNotifyDataSetChanged extends Activity implements OnScrollListener { private ListView lv_listview; private Vector<News> news = new Vector<News>(); private MyAdapter myAdapter; /** 数据更新完成之后的标记 */ private static final int DATA_UPDATE = 0x1;// Ctrl+Shift+X Ctrl+Shift+Y @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notifydatasetchanged_layout); lv_listview = (ListView) findViewById(R.id.lv_listview); /** 滚动监听 */ lv_listview.setOnScrollListener(this); /** 加载尾部 布局 */ View footerView = getLayoutInflater().inflate(R.layout.loading, null); // lv_listview.addHeaderView(headerView); lv_listview.addFooterView(footerView); initData(); myAdapter = new MyAdapter(); lv_listview.setAdapter(myAdapter); } private int index = 1; /** * 初始化数据 */ private void initData() { for (int i = 0; i < 100; i++) { News n = new News(); n.setTitle("title--" + index); n.setContent("content--" + index); index++; news.add(n); } } /** * 线程之间通讯的机制 */ Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case DATA_UPDATE: myAdapter.notifyDataSetChanged(); break; } }; }; /** * 开线程模拟加载数据 * * @author sjm * */ class LoadDataThread extends Thread { @Override public void run() { initData(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } // myAdapter.notifyDataSetChanged(); // 通过handler给主线程发送消息标记 handler.sendEmptyMessage(DATA_UPDATE); } } /** * 自定义适配器 * * @author sjm * */ class MyAdapter extends BaseAdapter { @Override public int getCount() { return news.size(); } @Override public Object getItem(int position) { return news.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh = null; if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.notifydatasetchanged_item, null); vh = new ViewHolder(); vh.tv_content = (TextView) convertView.findViewById(R.id.tv_content); vh.tv_title = (TextView) convertView.findViewById(R.id.tv_title); convertView.setTag(vh); } else { vh = (ViewHolder) convertView.getTag(); } News n = news.get(position); vh.tv_title.setText(n.getTitle()); vh.tv_content.setText(n.getContent()); return convertView; } class ViewHolder { TextView tv_title; TextView tv_content; } } private int visibleLastIndex;// 可显示的最后一条数据的索引值 /** * 滚动状态:SCROLL_STATE_FLING:正在滚动 SCROLL_STATE_IDLE:没有滚动,空闲 TOUCH_SCROLL:在滚动条上 * * @param view * @param scrollState */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (myAdapter.getCount() == visibleLastIndex && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { new LoadDataThread().start(); } } /** * 正在滚动 * * @param view * @param firstVisibleItem * 第一条数据 * @param visibleItemCount * 总数据 * @param totalItemCount * */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { visibleLastIndex = firstVisibleItem + visibleItemCount - 1; }}**实体类 News**<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
package com.sjm.gridview.entity;/** * * @author sjm * */public class News { private String title; private String content; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; }}
ExpandableListviewActivity
package com.sjm.expandableListview;
import com.sjm.gridview.R;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 可扩展的listview :ExpandableListView
*
* @author sjm
*
*/
public class ExpandableListviewActivity extends Activity {
private ExpandableListView expandableListview;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expandablel_layout); expandableListview = (ExpandableListView) findViewById(R.id.expandableListview); expandableListview.setAdapter(new MyExpandableAdapter()); /** * 点击子item事件 */ expandableListview.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(getApplicationContext(), childs[groupPosition][childPosition], Toast.LENGTH_SHORT) .show(); return true; } });}private static String groups[] = { "好友", "黑名单" };private static String childs[][] = { { "老大", "老二"}, { "老三", "老四" } };/** * 适配器 * * @author sjm * */class MyExpandableAdapter extends BaseExpandableListAdapter { /** * 组的总数----------->也就是父item的长度 */ @Override public int getGroupCount() { return groups.length; } /** * 子类的总数----->子item的长度 */ @Override public int getChildrenCount(int groupPosition) { return childs.length; } /** * 获取父item的每一个位置 */ @Override public Object getGroup(int groupPosition) { return groups[groupPosition]; } /** * 获取子item的每一个位置 */ @Override public Object getChild(int groupPosition, int childPosition) { return childs[groupPosition][childPosition]; } /** * 获取父item的每一个选项 */ @Override public long getGroupId(int groupPosition) { return groupPosition; } /** * 获取子item的每一个选项 */ @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } /** * */ @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder vh; if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.expandable_group_layout, null); vh = new GroupViewHolder(); vh.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon); vh.tv_title = (TextView) convertView.findViewById(R.id.tv_title); convertView.setTag(vh); } else { vh = (GroupViewHolder) convertView.getTag(); } // vh.iv_icon.setImageResource(resId); vh.tv_title.setText(groups[groupPosition]); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder vh; if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.expandable_group_layout, null); vh = new ChildViewHolder(); vh.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon); vh.tv_title = (TextView) convertView.findViewById(R.id.tv_title); convertView.setTag(vh); } else { vh = (ChildViewHolder) convertView.getTag(); } // vh.iv_icon.setImageResource(resId); vh.tv_title.setText(childs[groupPosition][childPosition]); return convertView; } /** * 二级选项是否可以被选中 */ @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class GroupViewHolder { ImageView iv_icon; TextView tv_title; } class ChildViewHolder { ImageView iv_icon; TextView tv_title; }}
}
xml
activity_main
<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" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" > <GridView android:id="@+id/gridView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:columnWidth="90dp" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" > </GridView></LinearLayout>
listview1_layout
<?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="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/sample_0" /> <TextView android:id="@+id/tv_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /></LinearLayout>```**loading**<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
<?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="match_parent" android:orientation="horizontal" android:layout_marginTop="10dp" android:gravity="center_horizontal" > <ProgressBar android:id="@+id/progress_load" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_load" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在玩命加载中..." android:textAppearance="?android:attr/textAppearanceSmall" /></LinearLayout>```**notifydatasetchanged_item**<div class="se-preview-section-delimiter"></div>
<?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="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="title" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="content" /></LinearLayout>
notifydatasetchanged_layout
- android 个人学习笔记------------GridView&ListView
- listview、gridview的setOnScrollListener使用(个人笔记)
- Android学习笔记(十二):ListView和GridView
- Android的listview、gridview 笔记
- android GridView学习笔记
- android学习 gridView + android 流程个人图解
- 个人android学习笔记
- Android学习笔记——Android PullToRefresh (ListView,GridView 下拉刷新) 使用介绍
- Android学习笔记--ListView
- Android ListView 学习笔记
- Android ListView学习笔记
- Android学习笔记-ListView
- Android学习笔记之GridView
- Android学习笔记之GridView
- Android之 GridView学习笔记
- Android学习笔记(十一)GridView
- Android学习笔记之GridView
- intent listview gridview 笔记
- 使用复合键优化倒排索引
- 指南第一章 例题一 UVA 11292 Dragon of Loowater(贪心算法)
- hadoop之用户定制
- 用DataJoin实现多数据源的Reduce端链接
- iOS开发 选择日期的view 一(UIDatePicker的封装)
- android 个人学习笔记------------GridView&ListView
- 通过全局文件复制实现多数据源的Map端连接
- Android系统源码阅读(7):Content Provider的启动
- Codeforces刷题之路——148A Insomnia cure
- Hadoop与关系数据库
- Pig安装
- zabbix 通过gateway 获取远程主机的JMX信息
- 关系模式范式
- wifi连接真机调试并adb操作