到目前为止,我已经花了大约6个小时的时间,除了路障之外什么都没打.一般的前提是a中有一些行ListView(无论是由适配器生成,还是作为标题视图添加)包含一个EditText小部件和一个Button.我想要做的就是能够使用jogball /箭头,将选择器导航到正常的单个项目,但是当我到达特定行时 - 即使我必须明确地识别行 - 它具有可聚焦孩子,我希望那个孩子采取焦点而不是用选择器指示位置.
我已经尝试了很多可能性,到目前为止还没有运气.
布局:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
标题视图:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Run Code Online (Sandbox Code Playgroud)
假设适配器中还有其他项目,使用箭头键将按预期在列表中上/下移动选择; 但是当到达标题行时,它也会与选择器一起显示,并且无法专注于EditText使用jogball.注意:点击它EditText 会将焦点集中在那一点,但是它依赖于触摸屏,这不是必需的.
ListView在这方面显然有两种模式:
1 setItemsCanFocus(true).:从不显示选择器,但EditText使用箭头时可以获得焦点.焦点搜索算法难以预测,并且没有选择哪个项目的视觉反馈(在任何行上:具有可聚焦儿童或不具有可聚焦儿童),这两者都可以给用户带来意想不到的体验.
2 setItemsCanFocus(false).:选择器始终以非触摸模式绘制,并且EditText永远无法获得焦点 - 即使您点击它也是如此.
更糟糕的是,调用editTextView.requestFocus()返回true,但事实上并没有给EditText带来焦点.
我想象的基本上是1和2的混合,而不是列表设置,如果所有项目都是可聚焦的,我想为列表中的单个项目设置可聚焦性,以便选择器从选择无缝转换不可聚焦项目的整行,以及遍历包含可聚焦子项的项目的焦点树.
任何接受者?
我遇到了问题EditText.我使用以下适配器:
public class RowTextViewAdapter extends BaseAdapter {
...
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (rowTitles.get(position).equals("edit")) {
if(et == null){
et = new EditText(activity);
et.setText("Test");
}
return et;
}
else {
convertView = new TextRow(activity);
holder = new ViewHolder(((TextRow) convertView).getTextView(), ((TextRow) convertView).getImageView());
convertView.setTag(holder);
holder.getTextView().setText(StringManager.getInstance().getText(rowTitles.get(position), activity));
holder.getImageView().setImageBitmap(assetController.getBitmap(additiveIcons.get(position) + ".png", null));
return convertView;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且ListActivity:
public class AppSettingActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter …Run Code Online (Sandbox Code Playgroud) 目前我这样做是为了在点击编辑文本后获得listview中最后一项的焦点:
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());
}
});
Run Code Online (Sandbox Code Playgroud)
它工作得很好并抓住了最后一项,问题是软键盘出现并覆盖列表视图中的最后3项.有没有办法显示软键盘出现后的最后一项并调整屏幕大小?谢谢!
我正在编写一个活动来列出数据库中的一堆项目,并显示一个包含数量的附加列.我实现了一个ArrayAdapter来显示我的自定义布局.以下是适配器最重要部分的代码:
static class ViewHolder {
protected TextView text;
protected EditText editText;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowquantitylayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.editText = (EditText) view.findViewById(R.id.editText);
viewHolder.editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
Log.i(TAG, "Editable:" + s.toString());
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void …Run Code Online (Sandbox Code Playgroud)