android - 在动态 ListView 中的第一个 EditText 上设置 RequestFocus

标签 android android-layout android-listview android-edittext

目前,我正在循环遍历动态数组列表,并从其数据中构建带有开关和编辑文本的 ListView 。

    for (int i = 0; i < response.size(); ++i) {
...
xxx.SetId(i)
...
}

如果 Edittext 位于第一个位置,这是我的工作解决方案:

if (i == 0 ) {
                    editText.requestFocus();
                    getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                }   

但是如何将焦点设置在第一个可用的 Edittext 上呢?例如两次切换后的第三个位置? (位置根据arraylist动态变化)

最佳答案

通常,您应该在附加到 ListViewAdapter 中填充和设置任何所需的状态。一个简单的解决方案是:

public class MyAdapter extends Adapter {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = layoutInflator.inflate(R.layout.somelayout, parent, false);
        // position is zero-based so 3rd item is at position 2
        if (position == 2) {
            view.findViewById(R.id.edittext).requestFocus();
        }
        return view;
    }
}

要将 ListView 滚动到第 3 个项目,您可以调用 listView.setSelection(2)

关于android - 在动态 ListView 中的第一个 EditText 上设置 RequestFocus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135790/

相关文章:

android - 如何在 ListView 的每一行中实现一个复选框

android - AAR 可以包含传递依赖吗?

android - 在 MediaStyle 通知中禁用或隐藏搜索栏

android - 我在 eclipse 中的 android 模拟器无法启动

java - 使用 Gson 将 Json 对象解析为 Json 数组

android - AppBarLayout 在滚动行为上隐藏工具栏,切换 fragment

android - 如何在 android 中的 gridview 适配器的 getView() 内膨胀另一个布局?

android - 如何正确扩展 LinearLayout 以创建自定义 View

android - 一行中的按钮单击事件影响android中listview中的其他行

java - 删除其中一项后,如何更新 ListView 中每一项的显示总价?