`
ldl8818
  • 浏览: 125957 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

android ListView开发经常用到的小知识点

 
阅读更多

android上改变listView的选中颜色 
ListView选中时默认是黄色,很多时候会和我们软件的配色不符合,那么我就教你如何修改默认的ListView配色,改变ListView选中颜色有两个方法: 

1. 在程序中: 

Java代码  收藏代码
  1. Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback);  
  2. ListView.setSelector(drawable);  



2. 在xml里面的ListView标签下添加: 
Java代码  收藏代码
  1. android:listSelector=”#00000000″ //后面的颜色可以自己定这样写是透明的  



记录和恢复ListView滚动的位置 
有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码: 

Java代码  收藏代码
  1. //列表滚动  
  2. private OnScrollListener ScrollLis = new OnScrollListener() {  
  3.    
  4.     @Override  
  5.     public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {  
  6.     }  
  7.    
  8.     @Override  
  9.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
  10.         if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){  
  11.                     ListPos=list.getFirstVisiblePosition();  //ListPos记录当前可见的List顶端的一行的位置  
  12.             }  
  13.     }  
  14. };  



接下来就是还原位置,放在ListView加载之后: 


Java代码  收藏代码
  1. list.setSelection(ListPos);  



关于android ListView的美化 

用心的朋友应该会发现,listview中在设置了背景之后。会有些问题。 
1.、listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来。 
2 、listview的上边和下边有黑色的阴影。 
3、lsitview的每一项之间需要设置一个图片做为间隔。 
针对以上问题 在listview的xml文件中设置一下语句。 



问题1 有如下代码结解决 android:scrollingCache=”false” 或 android:cacheColorHint=”#00000000″ 
问题2 用如下代码解决:android:fadingEdge=”none” 
问题3 用如下代码解决: android:divider=”@drawable/list_driver” 其中 @drawable/list_driver 是一个图片资源 




ListView拖动时背景黑色的问题 

我们知道在Android中ListView是一个比较常用的UI控件,我们在大部分开发中都需要用到它,因此Android为我们提供了ListView的多种实现方法,通过自定义显示布局让显示的内容更加美观,但是我们会发现这样一个问题,当我们操作ListView的时候,如果不使用手机上下按键的时候,直接用触摸拖动视图的方式,会发现ListView的背景一片黑色,而且所有被选中的文字都变成一片漆黑。 

其实这个问题发生的原因在于ListView存在缓存颜色机制,因此我们可以通过设定缓存颜色为透明的方法来解决这个问题。ATAAW.COM提供两个解决方法供大家使用,如下所示: 

A、通过布局属性来设定(ListView的属性中直接定义) 

android:cacheColorHint=”#00000000″ 

B、在代码中直接设定 

listView.setCacheColorHint(Color.TRANSPARENT); 

这样就可以解决黑色出现的问题了。 


ListView 中添加按钮,动态删除添加ItemView的操作 

要实现添加按钮的操作,必须自定义Adapter,使用Button View的setTag()方法,将Button所属的位置设置到tag当中
要实现动态添加删除ItemView的操作,必须首先调整调整Adapter所绑定的数据源,然后调用Adapter的notifyDataSetChanged()方法 

以下为实现的一个实例 

Java代码  收藏代码
  1. package com.jason.joysmsyd;  
  2.    
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.    
  8. import android.app.ListActivity;  
  9. import android.content.Intent;  
  10. import android.os.Bundle;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.view.Window;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.BaseAdapter;  
  17. import android.widget.Button;  
  18. import android.widget.EditText;  
  19. import android.widget.TextView;  
  20.    
  21. public class SendMain extends ListActivity implements OnClickListener{  
  22.    
  23.     Button buttonMessage,buttonContact,buttonHistory;  
  24.     EditText textMessage;  
  25.    
  26.     List<Map<String,String>> contacts = new ArrayList<Map<String,String>>();  
  27.    
  28.    
  29.    
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         // TODO Auto-generated method stub  
  33.         super.onCreate(savedInstanceState);  
  34.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  35.    
  36.         this.setContentView(R.layout.layout_send);  
  37.    
  38.         buttonMessage = (Button) this.findViewById(R.id.ButtonMessage);  
  39.         buttonContact = (Button) this.findViewById(R.id.ButtonContact);  
  40.         buttonHistory = (Button) this.findViewById(R.id.ButtonHistory);  
  41.    
  42.         textMessage = (EditText)this.findViewById(R.id.EditTextMessage);  
  43.         textMessage.setText(this.getIntent().getExtras().getString("message"));  
  44.    
  45.     }  
  46.    
  47.     public void onClick(View v) {  
  48.         // TODO Auto-generated method stub  
  49.         switch(v.getId()){  
  50.         case R.id.ButtonMessage:  
  51.             this.finish();  
  52.             break;  
  53.         case R.id.ButtonContact:  
  54.         {  
  55.             Intent intent = new Intent();  
  56.             intent.setAction("com.jason.action.contact");  
  57.             this.startActivityForResult(intent, 0);  
  58.         }  
  59.             break;  
  60.         case R.id.ButtonHistory:  
  61.         {  
  62.             Intent intent = new Intent();  
  63.             intent.setAction("com.jason.action.history");  
  64.             this.startActivityForResult(intent, 1);  
  65.         }  
  66.             break;  
  67.         }  
  68.    
  69.     }  
  70.    
  71.    
  72.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  73.         // TODO Auto-generated method stub  
  74.         super.onActivityResult(requestCode, resultCode, data);  
  75.          if (requestCode == 0 && resultCode == RESULT_OK) {  
  76.             this.getcontactFromString(data.getExtras().getString(  
  77.                     UserSelectActivity.RETURN_LIST));  
  78.             bindDataToList();  
  79.         }  
  80.     }  
  81.    
  82.     private void getcontactFromString(String data) {  
  83.         if (data == null || data.length() == 0) {  
  84.             return;  
  85.         }  
  86.    
  87.    
  88.         String[] arrayContact = data.split("#");  
  89.         for (String singleContact : arrayContact) {  
  90.             if (singleContact != null && singleContact.length() > 0) {  
  91.                 String[] props = singleContact.split(":");  
  92.                 if (props.length == 2) {  
  93.                     Map<String,String> contact = new HashMap<String,String>();  
  94.                     contact.put("name", props[0]);  
  95.                     contact.put("phone", props[1]);  
  96.                     contacts.add(contact);  
  97.    
  98.                 }  
  99.             }  
  100.    
  101.         }  
  102.    
  103.     }  
  104.    
  105.     private void bindDataToList(){  
  106.         this.setListAdapter(new MyAdapter());  
  107.     }  
  108.    
  109.     public class MyAdapter extends BaseAdapter{  
  110.    
  111.         public int getCount() {  
  112.             // TODO Auto-generated method stub  
  113.             return contacts.size();  
  114.         }  
  115.    
  116.         public Object getItem(int position) {  
  117.             // TODO Auto-generated method stub  
  118.             return contacts.get(position);  
  119.         }  
  120.    
  121.         public long getItemId(int position) {  
  122.             // TODO Auto-generated method stub  
  123.             return position;  
  124.         }  
  125.    
  126.    
  127.         public View getView(int position, View convertView, ViewGroup parent) {  
  128.             // TODO Auto-generated method stub  
  129.             LayoutInflater inflater = SendMain.this.getLayoutInflater();  
  130.              final View view = inflater.inflate(R.layout.layout_user_item, null);  
  131.              final TextView textPhone = (TextView) view.findViewById(R.id.text1);  
  132.              final TextView textName = (TextView) view.findViewById(R.id.text2);  
  133.              Button button = (Button)view.findViewById(R.id.buttonDelete);  
  134.    
  135.              textPhone.setText(contacts.get(position).get("phone"));  
  136.              textName.setText(contacts.get(position).get("name"));  
  137.    
  138.              button.setTag( position);  
  139.    
  140.              button.setOnClickListener(new OnClickListener(){  
  141.    
  142.                 public void onClick(View v) {  
  143.                     // TODO Auto-generated method stub  
  144.                     int position = Integer.parseInt(v.getTag().toString());  
  145.                     contacts.remove(position);  
  146.                     MyAdapter.this.notifyDataSetChanged();  
  147.    
  148. //                  SendMain.this.getListView().refreshDrawableState();  
  149.                 }});  
  150.    
  151.    
  152.    
  153.    
  154.             return view;  
  155.         }  
  156.    
  157.     }  
  158. }  



Android ListView 清单与其Trigger 触发事件 

Android ListView 清单与其选择时的触发事件, 

可以参考下面的程式范例 : 

Java代码  收藏代码
  1. public class helloWorld extends Activity {  
  2.    
  3.     String[] vData = null;  
  4.    
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.    
  8.         // 要做为ArrayAdapter的资料来源  
  9.         vData = new String[]{"足球","棒球","篮球"};  
  10.    
  11.         // 建立"阵列接收器"  
  12.         ArrayAdapter<String>  arrayData = new ArrayAdapter<String>(  
  13.                 this  
  14.                 , android.R.layout.simple_list_item_1  
  15.                 , vData  
  16.                 );  
  17.    
  18.         // 建立ListView 物件  
  19.         ListView  lv = new ListView(this);  
  20.    
  21.         // 设定ListView 的接收器, 做为选项的来源  
  22.         lv . setAdapter ( arrayData );  
  23.    
  24.         // ListView 设定Trigger  
  25.         lv . setOnItemClickListener ( new OnItemClickListener() {  
  26.    
  27.             public void onItemClick (AdapterView<?> arg0, View arg1, int arg2,  
  28.                     long arg3) {  
  29.                 // TODO Auto-generated method stub  
  30.                 setTitle( getResources().getString(R.string.app_name) + ": " + vData [ arg2 ]);  
  31.             }  
  32.         });  
  33.    
  34.         // 设定ListView 为ContentView  
  35.         setContentView(lv);  
  36.     }  
  37. }  

 
 
 


Android中的ListView内容刷新问题 

最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来。在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决方案。对于ListView与数据库的同步,高手们建议使用ContentProvider对象。但是如果我不使用数据库呢?也有人回答用notifyDataSetChanged()方法。这倒是一个正确的解决方案,但是对于新手来说,还是比较困惑怎么去用,这里我贴一下我的用法: 

Java代码  收藏代码
  1. OnClickListener listener2 = new OnClickListener() {  
  2.         @Override  
  3.         public void onClick(View v) {  
  4.             // TODO Auto-generated method stub  
  5.             Map<String, Object> m = new HashMap<String, Object>();  
  6.             String tiString  = tv.getText().toString(); // 注意这里我为什么要取出这个EditText的内容  
  7.             m.put("prod_na", tiString); // 而不这样写 m.put("prod_na", tv.getText());  
  8.             m.put("prod_type", tiString); // 因为tv.getText()返回的是Editable对象,真正的数据是被缓存的,  
  9.                                           // 也就是说你后续的EditText改动都会影响之前添加的Item  
  10.             coll.add(m);  
  11.    
  12.             // 取回Adapter对象,用于调用notifyDataSetChanged方法。  
  13.             SimpleAdapter sAdapter = (SimpleAdapter)lv.getAdapter();  
  14.             sAdapter.notifyDataSetChanged();  
  15.         }  
  16.     };  


这里涉及到了Android中的MVC模式概念,如何存储数据,控制和显示。 

你可以认为ListView是一个View,那么mode是什么呢?显然是SimpleAdapter对象,而Control又是什么呢?那只能是notifyDataSetChanged()了。当数据变化时,也就是SimpleAdapter所处理的数据变化了,那么我们就需要调用 notifyDataSetChanged 去通知View作出改变。 
分享到:
评论

相关推荐

    android listview

    本篇文章将深入探讨“android listview”相关的知识点,包括横向ListView、微信风格的ListView以及XListView的优化。 首先,我们来看“横向ListView”。在Android原生的ListView通常是垂直滚动的,但有时我们可能...

    android listview+fragment实现仿京东分类

    以下是相关知识点的详细说明: 1. **ListView**: ListView是Android SDK提供的一种视图组件,用于展示大量数据的列表形式。它具有滚动效果,可以动态加载数据,节省内存,并且可以通过Adapter进行数据绑定。在本...

    android listView 异步加载图片

    总的来说,“android listView 异步加载图片”是一个重要的性能优化技巧,它涉及到多线程编程、内存管理、图片处理等多个Android开发的核心知识点。正确实现这一功能,可以显著提升用户体验,使应用程序更加流畅。

    android listview 上拉刷新,滑动底部自动增加更多

    在Android开发中,ListView是常用的数据展示控件,用于显示大量的列表数据。"android listview 上拉刷新,滑动底部自动增加更多"这个主题涉及到两个关键功能:上拉刷新(Pull-to-Refresh)和无限滚动(Infinite ...

    安卓listview相关相关-Android中ListView字母排序实现字母挤压效果以及右侧快速选中字母搜索关键字功能.rar

    在Android开发中,ListView是常用的一种控件...以上所述的各个知识点都是Android开发中的实用技巧,对于提升用户界面的交互性和效率至关重要。通过熟练掌握这些技术,开发者可以打造出更加人性化、易用的Android应用。

    Android luncher拖动效果+listview下拉加载

    在Android开发中,"Android launcher拖动效果"和"listview下拉加载"是两个重要的功能模块,它们分别涉及到用户界面交互和数据加载优化。让我们深入探讨这些知识点。 首先,Android launcher是用户启动应用程序的主...

    安卓listview相关相关-双列关联listview.rar

    下面将详细介绍与ListView相关的知识点,以及如何实现双列关联的ListView。 1. ListView基本概念:ListView是Android中的一个视图组件,它可以滚动显示多个行项目,每个行项目由一个或多个View组成,适用于显示大量...

    android一个界面多个listview

    在Android开发中,有时我们需要在一个界面上展示多个不同的列表数据,这时就可能需要用到多个ListView。ListView是Android系统提供的一个强大的视图组件,它可以显示一组长列表,并且支持滚动操作。在处理一个界面多...

    Android数据库信息显示在listview上

    本篇将详细讲解如何实现这个功能,涉及到的知识点包括SQLite数据库操作、适配器(Adapter)的使用以及ListView的定制。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常会创建一个SQLiteOpenHelper的...

    安卓listview相关相关-androidlistview中item通过viewpager实现.rar

    在本案例中,“安卓listview相关相关-androidlistview中item通过viewpager实现.rar”正是这样一个示例,它展示了如何在ListView的每个Item内嵌入一个ViewPager,从而实现滑动查看的效果。 首先,我们需要理解...

    Android listview实现货币的不同

    以下是一些关键知识点: 1. **货币格式化**:在Android中,我们可以使用`java.text.NumberFormat`类的子类`DecimalFormat`来格式化货币值。例如,设置货币符号、小数位数、分隔符等。对于不同国家的货币,需要根据...

    Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能

    总结来说,实现"Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能"涉及到以下关键知识点: 1. ListView的使用和Adapter机制 2. 数据排序与Comparator 3. 字母导航栏的创建与点击事件处理 4. EditText...

    Android手势研究(textview及listview对比验证)(一)

    博客可能涉及以下几个知识点: 1. **手势检测基础**:Android提供GestureDetector类来检测基本的手势,如轻触(Tap)、长按(Long Press)、滑动(Swipe)等。开发者可以通过重写GestureDetector的回调方法来处理...

    android横向滚动listview

    在Android开发中,"android横向滚动listview"指的是在传统ListView基础上实现水平滑动的视图组件。...通过研究"HorizontalVariableListView-master"项目,开发者可以深入理解这些知识点,并应用到自己的应用开发中。

    Android 仿网易新闻listview加header图片滚动,上拉下拉刷新-IT计算机-毕业设计.zip

    为了实现这些功能,开发者需要具备以下知识点: 1. Android布局管理:包括LinearLayout、RelativeLayout、ConstraintLayout等布局的使用,以及如何在XML中定义和组合这些布局。 2. AdapterView类和Adapter接口:...

    android实现listView多级菜单

    "android实现listView多级菜单"这个主题就是关于如何在Android应用中创建这种结构化视图的知识点。 首先,我们来理解ListView的基础。ListView是一个可以动态加载并显示大量数据的视图,它通过适配器(Adapter)将...

    listview android

    综上所述,"listview android"项目涉及了Android开发中的基础组件使用、数据绑定、性能优化以及交互设计等多个方面,对于初学者来说,理解和实践这些知识点是非常有价值的。通过这个项目,你可以掌握如何创建一个...

    android activity选项卡 listview 下拉刷新 仿新浪微博

    在Android应用开发中,"android activity选项卡 listview 下拉刷新 仿新浪微博"是一个常见的功能需求,它涉及到多个关键知识点,包括Activity管理、ListView的使用、下拉刷新(Pull-to-Refresh)机制以及模仿知名...

    Android通讯录的开发-完整代码

    在Android平台上,开发一个完整的通讯录应用涉及到许多关键知识点,这些知识点构成了Android应用程序设计的基础。以下将详细解析这个项目的相关技术点: 1. **Activity与Intent**:Android应用中的核心组件是...

    老罗android开发视频

    【标题】"老罗android开发视频"所涵盖的知识点主要集中在Android应用开发的学习上,这是一套由知名人士老罗提供的视频教程,旨在帮助初学者或有志于深入Android开发的人员掌握Android应用开发的基本技能。...

Global site tag (gtag.js) - Google Analytics