android - Edittext 在键盘向上和滚动 ListView 时保持焦点

标签 android listview keyboard focus android-edittext

我使用 ListView 。列表中的每一项都包含一个编辑文本。当我点击一个edittext时,弹出软键盘,我点击的edittext短时间获得焦点,然后失去焦点。我必须再次单击才能真正获得焦点(为什么?)

(关注编辑文本键盘向上)我滚动 ListView ...

因为 listview 元素被回收,焦点重新出现在列表中其他位置的 edittext 上,我想这是正常的,但是 为什么 Android 不删除这个该死的焦点!?如果我的用户开始滚动,我怎么能对 Android 说好,我不想再将焦点放在编辑文本上?

这是 Activity 的代码:

public class SimpleList extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.user_picker);

    ListView listview = (ListView)this.findViewById(R.id.user_picker_list);
    new UserPickerAdapter(this, listview); 

}

以及适配器的代码:

public class UserPickerAdapter extends BaseAdapter {

private final LayoutInflater mInflater;

private String[] mUsers = {"Guib", "Jonas", "Fred", "Denis", "Arnold", "Francois", "David", "Alex", "Saskia", "Verner", "Anatole"};

public UserPickerAdapter(Context context, ListView listview) {

    mInflater = LayoutInflater.from(context);   
    listview.setAdapter(this);  

}

@Override
public int getCount() {
    return mUsers.length;
}

@Override
public Object getItem(int position) {
    return mUsers[position];
}

@Override
public long getItemId(int position) {
    return position;
}

static private class Holder {
    TextView username; 
}

@Override
public View getView(int position, View convertView, ViewGroup arg2) {

    Holder holder;  

    if (convertView != null) {  

        holder = (Holder) convertView.getTag(); 

    } else {    

        holder = new Holder();  
        convertView = mInflater.inflate(R.layout.user_picker_list_item,null);
        holder.username = (TextView) convertView.findViewById(R.id.user_picker_list_item_name);
        convertView.setTag(holder);

    }

    String str = (String)getItem(position);
    holder.username.setText(str);
    return convertView;

}

以防万一,这是“user_picker.xml”中的代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" android:padding="0dp"><ListView android:background="@color/color_grey1" android:cacheColorHint="@color/color_grey1" android:id="@+id/user_picker_list" android:divider="@color/color_blueGrey1" android:layout_height="match_parent" android:layout_width="match_parent"/>

还有“user_picker_list_item.xml”中的那个

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent"><EditText android:layout_height="wrap_content"android:id="@+id/user_picker_list_item_name" android:layout_width="wrap_content" android:minWidth="200dp" android:layout_gravity="center"></EditText></LinearLayout> 

最佳答案

我尝试了 Gilbou 解决方案,但它对我不起作用,因为我在所有行中都有 EditTexts。但是通过一些改变我可以让它工作:

EditText currentEdit;

public View getView(int q, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView==null) {

        convertView = (LinearLayout)inflater.inflate(R.layout.grade_row, null);

        holder = new ViewHolder();
        //Inflate holder
        convertView.setTag(holder);     
    } else {
        holder = (ViewHolder)convertView.getTag();
    }

    if (listView.getSelectedItemPosition() == ListView.INVALID_POSITION) {
        if (currentEdit!=null)
            currentEdit.requestFocus();
    }

    //update row items

    return convertView;
}

此外,为 ListView 中的每个 EditText 添加一个焦点更改监听器:

myEditText.setOnFocusChangeListener(new OnFocusChangeListener() {  

    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) 
            currentEdit = myEditText;
    }
}

关于android - Edittext 在键盘向上和滚动 ListView 时保持焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623999/

相关文章:

java - 如何在android中的对话框中显示 ListView ?

android - 我怎样才能在 android 的 ListView 项目中有一个 facebook 共享按钮?

android - DrawerLayout的监听器和配置

java - 应用程序显示空白屏幕但预览看起来不错

java - 如何在按钮单击时显示不同的字符串

android - FindFragementByTag 后 Fragment 上没有 Activity 错误

android - OkHttp 比 HttpUrlsConnection for android 更快还是更好?

sql - 有没有办法在 ListView 中将表的两列显示为两行?

keyboard - 如何让 python 检测键盘上的击键并根据 Windows 中的输入键发送不同的字符串

android - 如何检查是否使用了 native /硬件键盘?