Android ListView item 選中高亮顯示之高效實現方式
之前在一篇文章中提到過 的實現方式,具體可以檢視這篇博文,這裡提供另外一種更為高效的方式。
先看效果
未選中時
選中某一項時
下面通過一段程式碼來講解實現過程
activity_main.xml
<RelativeLayout 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" tools:context=".MainActivity" > <ListView android:id="@+id/mListView" android:layout_width="match_parent" android:layout_height="match_parent" android:choiceMode="singleChoice" android:dividerHeight="1dp" android:divider="#d4d4d4"/> </RelativeLayout>
list_selector.xml
list_item_bg_normal.xml<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/> <item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/list_item_bg_pressed" android:state_activated="true"/> </selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:angle="90" />
</shape>
list_item_bg_pressed.xml<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:startColor="@color/right_bg"
android:endColor="@color/right_bg"
android:angle="90" />
</shape>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/iv_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="5dp"
android:src="@drawable/wechat_icon" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_icon"
android:textColor="@color/black"
android:textSize="15sp" />
<TextView
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/iv_icon"
android:layout_alignLeft="@id/tv_title"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/grey" />
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/tv_title"
android:textColor="@color/grey" />
</RelativeLayout>
ListView 介面卡 WXAdapter程式碼如下:
package com.example.listviewtest.adapter;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.listviewtest.R;
import com.example.listviewtest.entity.WXMessage;
public class WXAdapter extends BaseAdapter {
/**
* 上下文物件
*/
private Context mContext = null;
private List<WXMessage> data;
/**
* @param mainActivity
*/
public WXAdapter(Context ctx,List<WXMessage> data) {
mContext = ctx;
this.data = data;
}
@Override
public int getCount() {
return 100;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon);
holder.tv_title = (TextView)convertView.findViewById(R.id.tv_title);
holder.tv_msg = (TextView)convertView.findViewById(R.id.tv_msg);
holder.tv_time = (TextView)convertView.findViewById(R.id.tv_time);
convertView.setTag(holder);
} else {// 有直接獲得ViewHolder
holder = (ViewHolder)convertView.getTag();
}
WXMessage msg = data.get(position);
holder.tv_title.setText(msg.getTitle());
holder.tv_msg.setText(msg.getMsg());
holder.tv_time.setText(msg.getTime());
holder.iv_icon.setImageResource(msg.getIcon_id());
return convertView;
}
static class ViewHolder {
TextView tv_title;
TextView tv_msg;
TextView tv_time;
ImageView iv_icon;
}
}
MainActivity程式碼如下:
package com.example.listviewtest;
import java.util.ArrayList;
import java.util.List;
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 com.example.listviewtest.adapter.WXAdapter;
import com.example.listviewtest.entity.WXMessage;
public class MainActivity extends Activity implements OnItemClickListener {
private List<WXMessage> data = new ArrayList<WXMessage>();
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
findView();
}
private void initData() {
for (int i = 0; i < 50; i++) {
WXMessage msg = null;
if (i % 3 == 0) {
msg = new WXMessage("騰訊新聞", "人民日報刊文:習近平對評價毛澤東提6個重要觀點", "早上8:44");
msg.setIcon_id(R.drawable.qq_icon);
} else if (i % 3 == 1) {
msg = new WXMessage("訂閱號", "CSDN:2013年國內最具技術影響力公司", "早上8:49");
msg.setIcon_id(R.drawable.wechat_icon);
} else {
msg = new WXMessage("微博閱讀", "美女演各款妹子跟男朋友打電話", "昨天晚上");
msg.setIcon_id(R.drawable.qq_icon);
}
data.add(msg);
}
}
private void findView() {
mListView = (ListView) findViewById(R.id.mListView);
WXAdapter mAdapter = new WXAdapter(this, data);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
mListView.setItemChecked(position, true);
// mListView.setSelection(position);
}
}
這裡我們通過 ListView.setItemChecked(int position, boolean value)方法來選中被點選的Item,這時之前在list_item中設定的android:background="@drawable/list_selector"就開始生效了。
怎麼樣,比之前通過Adapter重新整理整個ListView的效率要高很多吧!
相關推薦
Android ListView item 選中高亮顯示之高效實現方式
之前在一篇文章中提到過 的實現方式,具體可以檢視這篇博文,這裡提供另外一種更為高效的方式。 先看效果 未選中時 選中某一項時 下面通過一段程式碼來講解實現過程 activity_main.xml <RelativeLayout xmlns:andro
android listView點選item,高亮顯示
實現listView中選擇item高亮的功能,最重要的程式碼就是 adapter.notifyDataSetInvalidated(); 通知觀察者,此條資料不再有效。 其次需要在實現BaseAdapter的類中新增一個方法,紀錄選中的item的id
Android TV 選中高亮顯示
add 頁面 androi radi ren att set lose main 1、開發Android TV APP, 使用遙控器選中按鈕或者選著其它菜單 如果沒有高亮顯示,就看不出選中哪個按鈕或者菜單 2、在drawable 添加 border_red.xml 設置選中
Android搜尋列表關鍵詞高亮顯示
很多App裡面都有搜尋的功能,搜尋的結果列表高亮顯示會使app體驗更好. 採用正則匹配找出字串setSpan設定顏色,當用戶輸入特殊字元時先將特殊字元進行轉義然後再進行匹配變色 話不多說,上程式碼 /** * 文字變色工具類 */ public cla
MyEclipse設定JAVA選中高亮顯示
原文地址:http://trujun.blog.163.com/blog/static/181234097201171621323571/ 1.開啟顯示功能 選擇Windows->Preferences->Java-> Editor-> Mar
Android程式設計心得-ListView的Item高亮顯示的辦法
在我們使用ListView的時候,經常會遇到某一項(Item)需要高亮顯示的情況,如下圖,有人說當我們點選子項的時候會變亮,但有時候業務邏輯需要讓ITEM根據條件自動變亮,下面我來介紹一下我自己的解決辦法 1.首先在layout資料夾對應的xml配置檔案定義一個l
android下實現ListView高亮顯示
使用者點選ListView中的item時,有的時候我們想要選中的item高亮顯示,以便提醒使用者。原本以為只需要簡單設定就能實現,但是並非如此。下面我們來介紹如何讓選中的item高亮顯示。 (Sam注:方法一使用是簡單方便,但在使用過程中,如果列表的條目超過一屏,會出現多條
arcgis for android空間查詢 點選某點,選中該點所在區域,高亮顯示
修改mail.xml <com.esri.android.map.MapView android:id="@+id/map" android:layout_width="fill_parent" an
angularjs 水平滾動選中按鈕高亮顯示 swiper和回到頂部指令的實現ionic
cor load sse component 邏輯 return position col href 首先安裝 swiper npm install --save swiper 或者 bower install --save swiper <link rel=
分散式搜尋elasticsearch java API 之 highlighting (對搜尋結果的高亮顯示)
搜尋請求的Body如下:: { "query" : {...}, "highlight" : { "fields" : { "title":{}, "intro" : {}
Lucene學習之高亮顯示
在搜尋引擎中我們經常會看到這樣的情景: 紅色部分我們稱之為高亮顯示,lucene提供了HighLighter模組來實現這一功能。 高亮顯示模組通常包含兩個獨立的功能,首先是動態拆分,就是從匹配搜尋的大量文字中選取一小部分句子。第二個內容就是高亮顯示。 我們先來看下高亮顯示的原理:
Android中TextView的文字內容中指定關鍵字高亮顯示
讓TextView的文字中指定關鍵字高亮顯示的工具類 public class HighLightKeyWordUtil { /** * @param color 關鍵字
呼叫任意的一級欄目,如何讓選中的二級子欄目實現高亮顯示?
class="black-top mini left-nav-prod-pos"><i class="black-top1"></i></span> <ul class="nav">
一步一步跟我學習lucene(11)---lucene搜尋之高亮顯示highlighter
highlighter介紹 這幾天一直加班,部落格有三天沒有更新了,望見諒;我們在做查詢的時候,希望對我們自己的搜尋結果與搜尋內容相近的地方進行著重顯示,就如下面的效果 這裡我們搜尋的內容是“一步一步跟我學習lucene”,搜尋引擎展示的結果中對使用者的輸入資訊進行了配色方
ElasticSearch之高亮顯示
一 什麼是highlight Highlight就是我們所謂的高亮,即允許對一個或者對個欄位在搜尋結果中高亮顯示。比如字型加粗或者字型呈現和其他文字普通顏色等。 為了執行高亮顯示,該欄位必須有實際的內
Android--MediaPlayer音樂播放器歌詞隨時間高亮顯示
package com.mrzhu.hightlight; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os
jquery實現帶複選框的表格行選中刪除時高亮顯示
/** * 設定含有複選框的表格中的背景色 */ $(document).ready(function() { /** * 表格行被單擊的時候改變背景色 */ $("#tablight tr:gt(0)").click(function() //獲取第2行後 { if ($(this)
android 高亮顯示指定區域
今年的部落格寫的好少,自己是越來越懶了,一轉眼又到年底了,回首年初的計劃,做到的卻寥寥無幾 大家使用app時肯定遇到過本篇主題的效果,當app出了某些新功能需要給使用者以提示時,更新app後高亮顯示需要提示使用者更新的地方,具體怎麼實現呢,其實也蠻簡單的,客官,
Eclipse 高亮顯示選中的相同變數
在 eclipse 中使用快捷鍵或其他原因,不小心按錯了,使得變數的高亮顯示沒了。 1.網友解決方法: 選擇:windows-> preferences->java->Editor->Mark Occurences 選擇最上的複選框
Android 給類及方法自動添加註釋 高亮顯示選中詞
修改作者、日期註釋格式:開啟Windows->Preferences->Java->Code Style->Code Templates 裡面的types 是為當前類新增頭部註釋。在頁面上alt+shift+J即可生成methods 生成的是方法的