gpt4 book ai didi

android - 将 EditText View 动态插入 Listview 时,虚拟键盘不会打开

转载 作者:行者123 更新时间:2023-11-29 14:41:12 25 4
gpt4 key购买 nike

我正在努力解决一个真正让我发疯的问题。我在论坛中发现了类似的问题,但它们都与这个不太一样。所以我希望有人对我如何解决这个问题有一个绝妙的主意。或者告诉我我做错了什么。 ;-)

设置:

我有一个 ListView。以下 XML 代码表示子元素:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:id = "@+id/container">

<EditText android:id = "@+id/child"
android:layout_width = "300dp"
android:layout_height = "wrap_content" />

</LinearLayout>

它是一个 LinearLayout,里面有一个 EditText View 。以下代码将一个 child 添加到列表中。由于 EditText View 比嵌入它的 LinearLayout 小,为了测试,我将点击监听器附加到这个(第一个) child 的 LinearLayout 的空白区域。当点击这个 child 时,第二个 child 被插入到 ListView 中:

public class Keyboard_Bug extends ListActivity
{
static BugAdapter mAdapter;
static String [] mNameArray = new String [2];
static int mCount;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mNameArray[0] = "Entry 1";
mCount = 1;
mAdapter = new BugAdapter(this);
setListAdapter(mAdapter);
}

public static class BugAdapter extends BaseAdapter
{
final LayoutInflater mInflater;
EditText mView;

public BugAdapter(Context context) { mInflater = LayoutInflater.from ( context ); }
public int getCount () { return mCount ; }
public long getItemId ( int position ) { return position; }
public Object getItem ( int position ) { return mNameArray[position]; }

public View getView( int position, View convertView, ViewGroup parent )
{
if ( convertView == null )
convertView = mInflater.inflate(R.layout.child, parent, false);

mView = (EditText) convertView.findViewById(R.id.child);
mView.setText(mNameArray[position]);

// Get focus 1
// if ( mNameArray[position].equals("Entry 1") )
// mView.requestFocus();

// Get focus 2
if ( mNameArray[position].equals("Entry 2") )
mView.requestFocus();

LinearLayout ll = (LinearLayout) convertView.findViewById(R.id.container);

ll.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mNameArray[mCount] = "Entry 2";
mCount++;
mAdapter.notifyDataSetChanged();
}});

return convertView;
}
}
}

当我使用带有注释“Get focus 1”的(注释掉的)代码部分时,一切正常。 “条目 1”获得焦点并弹出键盘。

问题:

当 onClick 处理程序现在插入第二个 child 并且我使用带有注释“获取焦点 2”的代码部分时,第二个 child 的 EditText View 获得焦点(这很好),但键盘没有打开。我也可以单击新创建的 EditText,即使光标在闪烁,我也无法打开键盘。唯一的方法是选择第一个 EditText,然后再次选择第二个 EditText。然后键盘打开。

我已经试过了:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

如在不同论坛上发布的那样,但没有用。唯一有用的是:

mgr.toggleSoftInput ( 0, 0 );

但这当然不是正确的方法,因为万一键盘已经打开,它就会关闭。

如果有任何建议,我将不胜感激!谢谢!

本德

最佳答案

在 EditText Click 事件上使用此代码:

InputMethodManager m = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(m != null){
m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
}

关于android - 将 EditText View 动态插入 Listview 时,虚拟键盘不会打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com