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

1. 在程序中:
Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback);ListView.setSelector(drawable);



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



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

//列表滚动private OnScrollListener ScrollLis = new OnScrollListener() { @Overridepublic void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {} @Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){                ListPos=list.getFirstVisiblePosition();  //ListPos记录当前可见的List顶端的一行的位置         }}};



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


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()方法

以下为实现的一个实例

package com.jason.joysmsyd; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import android.app.ListActivity;import android.content.Intent;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.View.OnClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.TextView; public class SendMain extends ListActivity implements OnClickListener{ Button buttonMessage,buttonContact,buttonHistory;EditText textMessage; List> contacts = new ArrayList>();   @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(R.layout.layout_send); buttonMessage = (Button) this.findViewById(R.id.ButtonMessage);buttonContact = (Button) this.findViewById(R.id.ButtonContact);buttonHistory = (Button) this.findViewById(R.id.ButtonHistory); textMessage = (EditText)this.findViewById(R.id.EditTextMessage);textMessage.setText(this.getIntent().getExtras().getString("message")); } public void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.ButtonMessage:this.finish();break;case R.id.ButtonContact:{Intent intent = new Intent();intent.setAction("com.jason.action.contact");this.startActivityForResult(intent, 0);}break;case R.id.ButtonHistory:{Intent intent = new Intent();intent.setAction("com.jason.action.history");this.startActivityForResult(intent, 1);}break;} }  protected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data); if (requestCode == 0 && resultCode == RESULT_OK) {this.getcontactFromString(data.getExtras().getString(UserSelectActivity.RETURN_LIST));bindDataToList();}} private void getcontactFromString(String data) {if (data == null || data.length() == 0) {return;}  String[] arrayContact = data.split("#");for (String singleContact : arrayContact) {if (singleContact != null && singleContact.length() > 0) {String[] props = singleContact.split(":");if (props.length == 2) {Map contact = new HashMap();contact.put("name", props[0]);contact.put("phone", props[1]);contacts.add(contact); }} } } private void bindDataToList(){this.setListAdapter(new MyAdapter());} public class MyAdapter extends BaseAdapter{ public int getCount() {// TODO Auto-generated method stubreturn contacts.size();} public Object getItem(int position) {// TODO Auto-generated method stubreturn contacts.get(position);} public long getItemId(int position) {// TODO Auto-generated method stubreturn position;}  public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLayoutInflater inflater = SendMain.this.getLayoutInflater(); final View view = inflater.inflate(R.layout.layout_user_item, null); final TextView textPhone = (TextView) view.findViewById(R.id.text1); final TextView textName = (TextView) view.findViewById(R.id.text2); Button button = (Button)view.findViewById(R.id.buttonDelete);  textPhone.setText(contacts.get(position).get("phone")); textName.setText(contacts.get(position).get("name"));  button.setTag( position);  button.setOnClickListener(new OnClickListener(){ public void onClick(View v) {// TODO Auto-generated method stubint position = Integer.parseInt(v.getTag().toString());contacts.remove(position);MyAdapter.this.notifyDataSetChanged(); //SendMain.this.getListView().refreshDrawableState();}});    return view;} }}



Android ListView 清单与其Trigger 触发事件

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

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

public class helloWorld extends Activity {     String[] vData = null;     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         // 要做为ArrayAdapter的资料来源        vData = new String[]{"足球","棒球","篮球"};         // 建立"阵列接收器"        ArrayAdapter  arrayData = new ArrayAdapter(                this                , android.R.layout.simple_list_item_1                , vData                );         // 建立ListView 物件        ListView  lv = new ListView(this);         // 设定ListView 的接收器, 做为选项的来源        lv . setAdapter ( arrayData );         // ListView 设定Trigger        lv . setOnItemClickListener ( new OnItemClickListener() {             public void onItemClick (AdapterView<?> arg0, View arg1, int arg2,                    long arg3) {                // TODO Auto-generated method stub                setTitle( getResources().getString(R.string.app_name) + ": " + vData [ arg2 ]);            }        });         // 设定ListView 为ContentView        setContentView(lv);    }}






Android中的ListView内容刷新问题

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

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


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

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


更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Android(安卓)Activity界面切换添加动画特效
  3. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  4. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  5. Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
  6. Android软键盘适配问题
  7. Android(安卓)SDK Manager无法更新的解决
  8. Android(安卓)Activity界面切换添加动画特效
  9. SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook

随机推荐

  1. android启动一个应用工具类
  2. 你好,Android 11
  3. android jni 调用static native void met
  4. android sensorsimulator使用介绍
  5. Android(安卓)SDK 离线下载安装
  6. android 9.0 收到通知消息亮屏
  7. android 设置标题
  8. 移动端区分安卓系统和ios系统
  9. Android(安卓)Retrofit 2.0框架上传图片
  10. 查看已經下載好ANDROID源碼是什麽版本號