day4.07总结_ListView和ExpandableListView和GridView和Spinner

一、 ListView 的分块显示和右侧导航

分块显示的应用场合:

1.要求数据有序

2.数据两不大,适合一次加载。

 

ListView 中数据的右侧导航

右侧导航一般建立在分块显示的基础上,同时会再添加一个listview显示对应的字母,点击字母时,定位其它listview中item的位置。

 

例子1:ListView分块显示及右边导航列

ContactActivity

public class ContactActivity extends ListActivity implements OnItemClickListener {

         ContactDao dao;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   setContentList();

                   setRightList();

         }

         private ContactAdapter cAdapter;

         private void setContentList() {

                   dao=new ContactDao(this);

                   List<Contact> contacts=dao.getContacts();

                   //对集合元素进行排序

                   Collections.sort(contacts,new Comparator<Contact>() {

                            @Override                            对字符串进行排序

                            public int compare(Contact lhs, Contact rhs) {

                                     return lhs.getName().compareTo(rhs.getName());

                            }

                   });

                   //1.获得ListView

                   //2.构建Adapter

                   //3.关联Adapter

                   cAdapter=new ContactAdapter(this,R.layout.contact_item_3,contacts);

                   setListAdapter(cAdapter);

         }

         private void setRightList(){右边导航页

                   Character []array=new Character[26];

                   int i=0;

                   for(char c='A';c<='Z';c++,i++){          快速创建一个字符数组

                            array[i]=c;

                   }

                   //1.listview

                   ListView lsv=(ListView) findViewById(R.id.rightLsv);

                   //2.adapter

                   ArrayAdapter<Character> adapter=new ArrayAdapter<Character>(this,

                                                        R.layout.right_item_1,

                                                        array);

                   //3.关联adapter

                   lsv.setAdapter(adapter);

                   //4.添加点击事件

                   lsv.setOnItemClickListener(this);

         }

 

    @Override

         protected void onListItemClick(ListView l, View v, int position, long id) {

                   Toast.makeText(this, "进入联系人页面", 1).show();

         }

         @Override

         public void onItemClick(AdapterView<?> parent, View view, int position,long id) {

                   //获得点击的item对象内容(对应联系人的section)

                   Character c=(Character)parent.getItemAtPosition(position);

                   //根据联系人的section找到最小的position

                   int pos=cAdapter.getPositionForSection(c);

                   //设置联系人列表顶端位置

                   getListView().setSelectionFromTop(pos,0);//其中0为y轴偏移量

         }

}

ContactAdapter

public class ContactAdapter extends BaseAdapter{

 

         private Context context;

         private int resource;

         private List<Contact> list;

         public ContactAdapter(Context context,int resource,List<Contact> list){

                   this.context=context;

                   this.resource=resource;

                   this.list=list;

         }

         @Override

         public int getCount() {

                   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 position;

         }

         @Override

         public View getView(int position, View convertView, ViewGroup parent) {

                   //1.item view

                   View v=null;

                   ViewHolder vh=null;

                   if(convertView==null){

                            v=View.inflate(context, resource, null);

                            vh=new ViewHolder();

                            vh.photoIv=(ImageView) v.findViewById(R.id.logo);

                            vh.nameTv=(TextView) v.findViewById(R.id.titleId);

                            vh.phoneTv=(TextView) v.findViewById(R.id.dateId);

                            vh.signTv=(TextView) v.findViewById(R.id.sign);

                            v.setTag(vh);

                   }else{

                            v=convertView;

                            vh=(ViewHolder)v.getTag();

                   }

                   //2. item data

                   Contact c=list.get(position);

                   //3. set item data to item view

                   vh.photoIv.setImageURI(Uri.fromFile(new File(c.getPhoto())));

                   vh.nameTv.setText(c.getName());

                   vh.phoneTv.setText(c.getPhone());

                   vh.signTv.setText(String.valueOf(c.getName().toUpperCase().charAt(0))); 字符设置成

                   //4.显示或隐藏signTv                                         字符串

                   //4.1找到对应位置的section()

                   int section=//对应字符的ASCII码值

                                     getSectionForPosition(position);

                   //4.2找到sectionlistview中的最小位置

                   int minPos=getPositionForSection(section);        只显示第一个

                   //4.3判定当前位置是否为minPos

                   if(position==minPos){

                            vh.signTv.setVisibility(View.VISIBLE);      

                   }else{

                            vh.signTv.setVisibility(View.GONE);     消失后,后面会跟上

                   }

                   return v;

         }

         public int getPositionForSection(int section){

                   for(int i=0;i<list.size();i++){                在有序的基础上,遇到第一个就返回

                            int sec=getSectionForPosition(i);

                            if(sec==section){

                                     return i;//minPos

                            }       

                   }

                   return -1;

         }

         private int getSectionForPosition(int pos){

                   return list.get(pos).getName()

                                     .toUpperCase()

                                     .charAt(0);

         }

         class ViewHolder{

                   ImageView photoIv;

                   TextView nameTv;

                   TextView phoneTv;

                   TextView signTv;

         }

}

 

 

二、ExpandableListView 的应用

ExpandableListView是一个特殊的ListView,能够实现展开或收起的功能(例如qq的我的好友,我的同学,。。。。)。

 

当我们需要默认展开或收起某个分组时,可

参考如下两个方法:

1)expandGroup

2)collapseGroup

 

ExpandableListView 应用中涉及的API:

 

1)ExpandableListActivity

2)ExpandableListAdapter

3)BaseExpandableListAdapter

4).......

例子2:ExpandableListView实现展开或收起

MainActivity

public class MainActivity extends Activity {

 

         String groups[]={"A","B","C"};

         String childs[][]={{"A1","A2"},{"B1","B2"},{"C1","C2","C3"}};

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

             //1.ExpandableListView

                   ExpandableListView lsv=(ExpandableListView)findViewById(R.id.lsvId);

                   //2.Adapter

                   EAdapter adapter=new EAdapter();

                   //3.关联adapter

                   lsv.setAdapter(adapter);

                   //默认展开第一个分组

                   lsv.expandGroup(0);//0为要展开的分组

                   //lsv.collapseGroup(0);(收起)

         }

         class EAdapter extends BaseExpandableListAdapter{

                   //getCount

                   @Override

                   public int getGroupCount() {

                            return groups.length;

                   }

                   @Override

                   public int getChildrenCount(int groupPosition) {

                            return childs[groupPosition]

                            .length;

                   }

                   //getItem

                   @Override

                   public Object getGroup(int groupPosition) {

                            return groups[groupPosition];

                   }

        //getItem

                   @Override

                   public Object getChild(int groupPosition, int childPosition) {

                            return childs[groupPosition][childPosition];

                   }

                   @Override

                   public long getGroupId(int groupPosition) {

                            return groupPosition;

                   }

                   @Override

                   public long getChildId(int groupPosition, int childPosition) {

                            return childPosition;

                   }

                   //表示item对应的id是否是稳定的,false表示不稳定

                   @Override

                   public boolean hasStableIds() {

                            return false;

                   }

                   //getView

                   @Override

                   public View getGroupView(int groupPosition, boolean isExpanded,

                   View convertView, ViewGroup parent) {

                            //1.item view

                            TextView v=(TextView) View.inflate(MainActivity.this,

                            android.R.layout.simple_expandable_list_item_1, null);

                            //2.item data

                            String gname=groups[groupPosition];

                            //3.set item data  add to item view

                            v.setText(gname);               多写两个getview方法

                            return v;

                   }

                   @Override

                   public View getChildView(int groupPosition, int childPosition,

                                     boolean isLastChild, View convertView, ViewGroup parent) {

                            //1.item view

                            TextView v=(TextView) View.inflate(MainActivity.this,

                            android.R.layout.simple_list_item_1, null);

                            //2.item data

                            String cname=childs[groupPosition][childPosition];

                            //3.set item data  add to item view

                            v.setText(cname);

                            return v;

                   }

                   @Override

                   public boolean isChildSelectable(int groupPosition, int childPosition) {

                            return true;//false表示不可选择

                   }

         }

}

三、GridView 的应用

GridView是一个以网格形式显示数据的Adapter

Layout对象。

 

GridView 常用属性:

1)numColumns (列的数量)

2)horizontalSpacing (水平间隙)

3)verticalSpacing (垂直间隙)

4)stretchMode (列宽剩余空间的应用模式,需结合columnWidth属性一起使用)

5)columnWidth(列的宽度)

例子3:GridView以网格形式显示数据(相册)

public class MainActivity extends Activity implements OnItemClickListener {

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

             //获得指定路径的图片

                   File sdcard=new File("/mnt/sdcard");

             File pngs[]=sdcard.listFiles(new FileFilter() {

                            @Override

                            public boolean accept(File file) {

                                     return file.isFile()&&file.getName().endsWith(".png");

                            }

                   });

                   //1.获得GridView

                   GridView gv=(GridView) findViewById(R.id.gvId);

             //2.构建适配器对象

                   ArrayAdapter<File> adapter=

                   new ArrayAdapter<File>(this,R.layout.grid_item_1,pngs){

                            @Override

                            public View getView(int position, View convertView, ViewGroup parent) {

                                     LinearLayout v=(LinearLayout)

                                     View.inflate(getContext(),

                                     R.layout.grid_item_1, null);

                                     ImageView iv=(ImageView) v.findViewById(R.id.imgId);

                                     iv.setImageURI(Uri.fromFile(getItem(position)));

                                     return v;

                            }

                   };

                   //3.关联适配器

                   gv.setAdapter(adapter);//ListAdapter

                   //4.添加监听器

                   gv.setOnItemClickListener(this);

         }

 

         @Override

         public void onItemClick(AdapterView<?> parent, View view, int position,

                            long id) {

                   //1.构建Intent对象

                   Intent intent=new Intent(this,OtherActivity.class);

                   //2.封装数据                 GridView上添加的监听器与ListView类似。

                   File f=(File)parent.getItemAtPosition(position);   

                   intent.putExtra("path",f.getPath());

                   //3.传递intent

                   startActivity(intent);

         }

}

 

四、Spinner 下拉列表

Spinner 是以下拉列表的形式显示数据的一个

Adapter Layout对象。

 

Spinner对象常用方法:

1)getSelectedItem

2)......

例子4:Spinner 下来框选择

public class MainActivity extends Activity {

         Spinner sp;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

           //1.获得Spinner对象

                   sp=(Spinner)findViewById(R.id.spinner);

           //2.构建适配器对象

                   ArrayAdapter<String> adapter=

                   new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,

                   new String[]{"博士","硕士","学士","大学"});

        <!-- java: R.array.items -->

           //3.关联Adapter对象

                   sp.setAdapter(adapter);

         }

         public void onClick(View v){

                   //获得spinner中选中的值

                   String item=sp.getSelectedItem().toString();

                   Toast.makeText(this, item, 1).show();

         }

}

 

定义字符数组

    <!-- 定义一个数组(strings.xml -->

    <string-array name="items">

        <item>博士</item>

        <item>硕士</item>

        <item>学士</item>

    </string-array>

    <!-- java: R.array.items -->

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
官方最新版4.0.7 同时也出现了4.0.8测试版 2021年7月3日 更新 4.07正式版 主要更新如下: 1.弹幕播放器添加播放列表支持 2. 添加时间显示设置。 3.优化弹幕其他细节。 4.修复后台二级菜单错位问题; 5.修复手机端模板切换线路按钮显示多个的问题; 6.其他已知BUG; 主目录文件结构及说明:(备注:调用方式前面皆省略了解析域名,浏览器访问时请添加在前面) 文件: * index.php 首页文件, 调用方式:"/?v=视频链接或视频名称"或"/?url=视频链接" *jx.php 简洁调用接口,仅加载视频,不显示列表等信息,调用方式:"/jx.php?url=视频地址"。 * video/index.php json接口, 调用方式:"/video/?url=视频地址"。 api.php 接口文件, 输出json数据供js使用。 play.html 框架调用文件,调用方式:"/play.html?url=URL地址" so.html 搜索页 404.html 404页 favicon.ico 网站图标 crossdomain.xml 文件跨域访问控制文件 注意:文件直接拷贝到网站根目录下; 目录:* admin 后台管理目录,为了安全请改名dmku 弹幕接口目录video API模块目录save 数据保存目录, 注意:权限必须为755以上,不然无法后台更新配置;cache 文件缓存 目录 注意:权限必须为755以上,不然无法正常工作;include 引用文件 目录player 播放器目录plus 插件存放目录source 资源目录templets 模版目录前台访问: "/?v=视频链接或视频名称"后台登录: "/admin"(默认账号admin:admin888)一般不用设置即可正常工作,如果基本设置里的网站目录显示不正确,请手动修改,后面需要加"/"注意: x3.7以后的版本,第一次安装需要先进后台确认恢复下配置才能使用,如果点击无反应请更换为IE浏览器重试!系统配置保存目录为"save"目录,其中"config.php"是主要配置文件,安装时注意备份,升级时保留这个目录或文件即可。"/source/bak" 为 "/save" 的备份目录,如果初始配置失败或数据显示异常可以从这个目录手动恢复配置文件。 无后门 亲测的文件包,可不用下载,那个只是测试过的,具体选择看你们
### 回答1: proxifier 4.07.zip是一个软件压缩文件,其中包含了Proxifier软件的安装文件。Proxifier是一款流行的网络工具,它可以帮助用户在私有网络(LAN)和Internet之间建立代理连接,从而实现网络流量的转发和管理。 通过Proxifier,用户可以配置代理服务器的IP地址和端口,使得所有的网络请求都经过该代理服务器。这样一来,用户可以实现被动连接和主动连接之间的无缝切换,并且可以针对特定的应用程序或网站进行流量控制。例如,用户可以通过Proxifier将特定应用程序的网络流量强制通过某个代理服务器,以实现对该应用程序的网络访问的监控和管理。 此外,Proxifier还支持协议转换和数据加密等高级功能。用户可以通过Proxifier实现不同协议(如HTTP、HTTPS、SOCKS等)之间的透明转换,并且还可以使用SSL或SSH等加密协议来保护网络连接的安全性。 Proxifier 4.07版本是Proxifier软件的最新发布版本,它修复了之前版本的一些bug,并提供了更好的性能和稳定性。这个.zip文件是为了方便用户下载和安装Proxifier软件而打包的压缩文件,用户只需要解压缩该文件,并按照其中的安装说明进行安装,就可以开始使用Proxifier来管理和调整网络连接。 ### 回答2: proxifier 4.07.zip是一个压缩文件,其中包含了Proxifier软件的4.07版本。Proxifier是一款网络工具软件,它可以帮助用户通过代理服务器访问网络。这个软件适用于Windows操作系统,并提供了一种简单而有效的方式来配置和管理代理服务器。使用Proxifier,用户可以隐藏自己的真实IP地址并通过代理服务器进行匿名访问,以便保护隐私。此外,Proxifier还可用于绕过特定网络的阻塞和限制,以便访问被限制的网站或服务。Proxifier是一款功能强大的工具,可用于各种网络应用和协议,包括Web浏览器、电子邮件客户端、FTP客户端等。它可以有效地提升用户的网络连接速度和安全性。Proxifier 4.07.zip文件可以通过下载和解压缩的方式安装Proxifier软件。安装完成后,用户可以根据自己的需求进行配置和使用,以实现更加灵活和安全的网络访问体验。总之,Proxifier是一个有用的网络工具,可以帮助用户更好地管理和控制网络连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值