当前位置:首页 » 安卓系统 » 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) {

热点内容
airpod安卓怎么切换下一曲 发布:2024-04-28 14:23:03 浏览:834
百姓网源码 发布:2024-04-28 14:18:56 浏览:892
war包防止反编译 发布:2024-04-28 14:17:16 浏览:327
linuxll命令 发布:2024-04-28 14:16:27 浏览:859
阿里云服务器增强安全配置取消 发布:2024-04-28 14:16:12 浏览:866
war3存储空间不足 发布:2024-04-28 13:20:54 浏览:949
微信密码已经忘记了如何找回 发布:2024-04-28 11:54:13 浏览:304
腾讯云服务器可以备案几个网站 发布:2024-04-28 11:54:12 浏览:458
影响编译速度的因素有哪些 发布:2024-04-28 11:53:58 浏览:255
安全配置汽车有哪些 发布:2024-04-28 11:48:07 浏览:830