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

时间:2013-08-08 20:45:36

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

目前我正在循环动态arraylist并从其数据构建带有开关和Edittexts的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动态变化)

1 个答案:

答案 0 :(得分:1)

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

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;
    }
}

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