當前位置:首頁 » 安卓系統 » androidlistview索引

androidlistview索引

發布時間: 2023-05-29 04:48:54

㈠ android中如何獲取listview中聚焦的item的索引值

list.setSelection(list.getCount());
list是ListView對象,這個是我剛試過的,可以,也是今天才用的,這行代碼要注意用到list.setAdapter(?)或者adapter.notifyDataSetChanged();之後,就是說,必須listView設置了適配器或者適配器數據源改變之後設置

㈡ android listview如何按時加滾動到頂部

listview的一些方法:

1.public
void setSelection (int position)

position位置的item置頂(即position位置的item到listview的最頂端),但是,沒有從原來位置到頂端的滑動效果。

2.public
void setSelectionFromTop (int position, int y)

與setSelection 類似。setSelection(position)就是setSelectionFromTop (position,0)

選中position指定的項目,並將所選項置於距離ListView頂端y像素的位置

參數

position 需要選中的項目的索引(從0開始)

y
距離ListView(包括間隙)頂端的位置

3.public
void smoothScrollToPositionFromTop (int position, int
offset)

平滑滾動到指定的適配器位置。 指定位置的視圖會滾動到相對頂邊偏移 offset 像素的位置顯示。
如果無法做到(比如該偏移量會使首尾條目超越列表邊緣),會滾動到盡量接近的位置。

參數

position 滾動到的位置

offset 滾動結束時,指定 position 條目距離視圖頂部的像素數

當offset=0時,可以把position位置的item置頂,而且帶有滑動效果,即會從原來位置輕輕滑動到最頂

端位置。

測試:
可以順利滾動,返回滾動也很順利,滑動順暢

4、public void
smoothScrollToPositionFromTop(int position)

參數:

position 滾動到的位置

帶有滑動效果的滾動到指定位置。

如何判斷其內容已滾動到最頂部或者最底部看

getListView().setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem==0){
Log.e("log", "滑到頂部");
}
if(visibleItemCount+firstVisibleItem==totalItemCount){
Log.e("log", "滑到底部");
}
}
});

平滑的滾動listview到一個指定位

package com.android.contacts.widget;

import android.content.Context;

import android.util.AttributeSet;

import android.widget.ListView;

public class AutoScrollListView extends ListView {

private static final
float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;

private int
mRequestedScrollPosition = -1;

private boolean
mSmoothScrollRequested;

public
AutoScrollListView(Context context) {

super(context);

}

public
AutoScrollListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public
AutoScrollListView(Context context, AttributeSet attrs, int
defStyle) {

super(context, attrs, defStyle);

}

public void
requestPositionToScreen(int position, boolean smoothScroll) {

mRequestedScrollPosition = position;

mSmoothScrollRequested = smoothScroll;

requestLayout();

}

@Override

protected void
layoutChildren() {

super.layoutChildren();

if (mRequestedScrollPosition == -1) {

return;

}

final int position =
mRequestedScrollPosition;

mRequestedScrollPosition = -1;

int firstPosition = getFirstVisiblePosition() +
1;

int lastPosition =
getLastVisiblePosition();

if (position >= firstPosition &&
position <= lastPosition) {

return; //
Already on screen

}

final int offset = (int) (getHeight() *
PREFERRED_SELECTION_OFFSET_FROM_TOP);

if (!mSmoothScrollRequested) {

setSelectionFromTop(position, offset);

// Since
we have changed the scrolling position, we need to redo child
layout

// Calling
"requestLayout" in the middle of a layout pass has no effect,

// so we
call layoutChildren explicitly

super.layoutChildren();

} else {

// We will
first position the list a couple of screens before or after

// the new
selection and then scroll smoothly to it.

int
twoScreens = (lastPosition - firstPosition) * 2;

int
preliminaryPosition;

if
(position < firstPosition) {

preliminaryPosition = position + twoScreens;

if (preliminaryPosition >=
getCount()) {

preliminaryPosition = getCount() - 1;

}

if (preliminaryPosition <
firstPosition) {

setSelection(preliminaryPosition);

super.layoutChildren();

}

} else
{

preliminaryPosition =
position - twoScreens;

if (preliminaryPosition <
0) {

preliminaryPosition = 0;

}

if
(preliminaryPosition > lastPosition) {

setSelection(preliminaryPosition);

super.layoutChildren();

}

}

smoothScrollToPositionFromTop(position, offset);

}

}

}

㈢ android 怎麼樣獲得listview的滾動條位置

(1)獲取這一條在新Cursor中的位置(posiition)
(2)獲取這一條在更換Cursor後ListView中的位置。
(4)由於ListView的可滾動的屬性,我們需要記錄更換Cursor前可視的第一條item的索引(ListView.getFirstVisiblePosition())
(3)區分FirstVisiblePosition是0和大於0的情況。由於header,也就是圖中的Loading那一條在新數據出來後是會消失的。
(4)當FirstVisiblePosition為0時實際指向的是header,我們要保持位置不變的是header下面第一條(R)的位置。那麼此時要設置FirstVisiblePosition為1
(5)當FirstVisiblePosition大於0時實際指向的就是item,但是我們需要設置FirstVisiblePosition為0。*
(6)我們根據FirstVisiblePosition用ListView.getChildAt(int position)函數獲取對應的item的View,再根據View.getTop()函數獲取到ListView頂部的距離Y。
這樣ListView.setSelectionFromTop(int position, int y)所需的兩個參數 position 和 y就都有了。
*註解:ListView.getChildAt(int position), 這個position指的是在可視的item中的索引,跟cursor里的位置是大不一樣的。可以看看ListView.getChildCount()函數得到個數是小於或等於Cursor里的個數的(不考慮header的話)。雖然一共可能有20條數據,但是界面只能看到8條,那麼這個ChildCount大約就是8了。另一方面, FirstVisiblePosition取出的是在總的條數中的索引,再將會消失的header考慮進來,所以就是 FirstVisiblePosition為0時要設為1,大於0時又要設為0。

㈣ 怎麼給listview添加 快速索引條

實現步驟:

1.自定義一個名叫SlideBar 的View。

2.在布局文件中加入這個自定義的View。

3. 在Activity中處理監聽事件。

接下來講講我是怎樣實現的:

先來看SlideBar這個類:

java">packagecom.folyd.tuan.view;

importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Typeface;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.View;

/**
*自定義的View,實現ListViewA~Z快速索引效果
*
*@authorFolyd
*
*/
{
privatePaintpaint=newPaint();
;
//是否畫出背景
privatebooleanshowBg=false;
//選中的項
privateintchoose=-1;
//准備好的A~Z的字母數組
publicstaticString[]letters={"#","A","B","C","D","E","F","G",
"H","I","J","K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z"};

//構造方法
publicSlideBar(Contextcontext){
super(context);
}

publicSlideBar(Contextcontext,AttributeSetattrs){
super(context,attrs);
}

@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
//獲取寬和高
intwidth=getWidth();
intheight=getHeight()-30;
//每個字母的高度
intsingleHeight=height/letters.length;
if(showBg){
//畫出背景
canvas.drawColor(Color.parseColor("#55000000"));
}
//畫字母
for(inti=0;i<letters.length;i++){
paint.setColor(Color.BLACK);
//設置字體格式
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
paint.setTextSize(20f);
//如果這一項被選中,則換一種顏色畫
if(i==choose){
paint.setColor(Color.parseColor("#F88701"));
paint.setFakeBoldText(true);
}
//要畫的字母的x,y坐標
floatposX=width/2-paint.measureText(letters[i])/2;
floatposY=i*singleHeight+singleHeight;
//畫出字母
canvas.drawText(letters[i],posX,posY,paint);
//重新設置畫筆
paint.reset();
}
}

/**
*處理SlideBar的狀態
*/
@Override
(MotionEventevent){
finalfloaty=event.getY();
//算出點擊的字母的索引
finalintindex=(int)(y/getHeight()*letters.length);
//保存上次點擊的字母的索引到oldChoose
finalintoldChoose=choose;
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
showBg=true;
if(oldChoose!=index&&listenner!=null&&index>0
&&index<letters.length){
choose=index;
listenner.onTouchLetterChange(event,letters[index]);
invalidate();
}
break;

caseMotionEvent.ACTION_MOVE:
if(oldChoose!=index&&listenner!=null&&index>0
&&index<letters.length){
choose=index;
listenner.onTouchLetterChange(event,letters[index]);
invalidate();
}
break;
caseMotionEvent.ACTION_UP:
default:
showBg=false;
choose=-1;
if(listenner!=null&&index>0&&index<letters.length)
listenner.onTouchLetterChange(event,letters[index]);
invalidate();
break;
}
returntrue;
}

/**
*回調方法,注冊監聽器
*
*@paramlistenner
*/
(
){
this.listenner=listenner;
}

/**
*SlideBar的監聽器介面
*
*@authorFolyd
*
*/
{

voidonTouchLetterChange(MotionEventevent,Strings);
}

}


然後在布局文件中加入這個自定義的控制項:


<!--上面的代碼省略掉了-->


<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@drawable/line3"/>

<TextView
android:id="@+id/float_letter"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:background="#F88701"
android:gravity="center"
android:textSize="40sp"
android:visibility="gone"/>

<com.folyd.tuan.view.SlideBar
android:id="@+id/slideBar"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"/>
</FrameLayout>然後在Activity中注冊監聽事件:

mSlideBar
.((){

@Override
publicvoidonTouchLetterChange(MotionEventevent,Strings){

float_letter.setText(s);
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
caseMotionEvent.ACTION_MOVE:
float_letter.setVisibility(View.VISIBLE);
break;

caseMotionEvent.ACTION_UP:
default:
float_letter.postDelayed(newRunnable(){

@Override
publicvoidrun(){
float_letter.setVisibility(View.GONE);
}
},100);
break;
}
intposition=array.indexOf(s);//這個array就是傳給自定義Adapter的
mListView.setSelection(position);//調用ListView的setSelection()方法就可實現了
}
});

㈤ android5.0怎麼判斷當前選中的listview的索引值

listView增加一個OnItemClickListener 事件,即條目點擊事件,點擊的時塌旁候會回調onItemClick方法,方法中的 position就是listView的索引值漏衫激。
private OnItemClickListener itemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?>返襪 parent, View view, int position,long id) {

熱點內容
深圳航天信息稅盤伺服器地址 發布:2024-03-28 22:47:51 瀏覽:203
玩csol伺服器連接中斷怎麼辦 發布:2024-03-28 22:46:19 瀏覽:905
apk加密軟體 發布:2024-03-28 22:36:14 瀏覽:695
cpu不能直接訪問的存儲器 發布:2024-03-28 22:31:49 瀏覽:440
嘀嘀打車源碼 發布:2024-03-28 22:26:02 瀏覽:934
資料庫脆弱點 發布:2024-03-28 22:25:06 瀏覽:800
2021款es升級了哪些配置 發布:2024-03-28 21:26:44 瀏覽:384
下述調度演算法 發布:2024-03-28 21:22:24 瀏覽:616
捷達哪個配置裝有esp 發布:2024-03-28 21:17:41 瀏覽:196
天氣源碼 發布:2024-03-28 21:14:11 瀏覽:428