首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单击编辑文本时在ListiView中显示最后一项

单击编辑文本时在ListiView中显示最后一项
EN

Stack Overflow用户
提问于 2011-03-16 14:57:02
回答 4查看 8.6K关注 0票数 6

目前,我这样做是为了在单击编辑文本后获得列表视图中最后一项的焦点:

代码语言:javascript
运行
复制
    bodyText.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {               
            getListView().setSelection(getListView().getCount());
        }
    });

    bodyText.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            getListView().setSelection(getListView().getCount());
        }
    });

它工作得很好,抓住了最后一个项目,问题是软键盘出现了,覆盖了列表视图中的最后3个项目。有没有办法在软键盘出现并调整屏幕大小后显示最后一项?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-17 12:02:09

我制作了自己的自定义ListView,如下所示:

代码语言:javascript
运行
复制
public class CustomListView extends ListView {

public CustomListView (Context context) {
    super(context);
}

public CustomListView (Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomListView (Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
    super.onSizeChanged(xNew, yNew, xOld, yOld);

    setSelection(getCount());

}
}

您必须包含所有3个构造函数,否则将抛出异常。

然后在XML中,通常将

ListView

代码语言:javascript
运行
复制
android:id="@+id/android:list"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"

ListView更改为com.blah.blah.CustomListView.

抱歉,布局混乱,由于某些原因,我无法让格式化程序正常工作。

运行应用程序。现在,当您单击EditText时,它会在软键盘显示后显示最后一项!请注意,有一些限制,比如当您在EditText中键入文本时出现自动完成功能时,由于ListView大小的变化,它也会显示最后一项。

享受吧!

票数 18
EN

Stack Overflow用户

发布于 2012-05-07 11:26:29

@Maurice提供的解决方案几乎是正确的(或者至少它对我几乎是有效的)。我必须修改onSizeChanged方法以将setSelection放入post调用中,如下所示:

代码语言:javascript
运行
复制
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
    super.onSizeChanged(xNew, yNew, xOld, yOld);

    post(new Runnable() {
        public void run() {
            setSelection(getCount());
        }
    });
}

Per the docs,post“导致Runnable被添加到消息队列中。runnable将在用户界面线程上运行。”这也是一些Android AbsListView源代码中使用的技术。

票数 2
EN

Stack Overflow用户

发布于 2011-03-16 15:26:34

使用

代码语言:javascript
运行
复制
<activity
.....
android:windowSoftInputMode="adjustResize" />

在您的清单文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5321968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档