この場合、単一のアイテムを含む ListAdapter があります。そのアイテムは、EditText を持つビューを生成します。
ビューが表示されたら、ユーザーがフィールドを編集できるようにソフト キーボードを開きたいと思います。
アダプターの getView() 関数を呼び出そうとしました:
View edittext = view.findViewById(R.id.EditText01);
edittext.requestFocus();
mInputMgr.showSoftInput(edittext, InputMethodManager.SHOW_FORCED);
何もしないようです。
私も試しました:
View edittext = view.findViewById(R.id.EditText01);
edittext.requestFocus();
mInputMgr.toggleSoftInput(0, 0);
これにより、不思議な理由で、ソフトキーボードが繰り返し開いたり閉じたりするループが発生します。
requestFocus を削除して、プログラムの EditText をタッチ クリックすると、ソフトキーボードがポップアップしますが、requestFocus があるかどうかに関係なく、showSoftInput が機能していないようです。
どうすればいいですか?
リスト要素の XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent"
android:focusable="true"
android:background="@color/light_blue"
>
<EditText android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:text=""
android:focusable="true"
android:layout_width="fill_parent" android:inputType="textShortMessage"></EditText>
</RelativeLayout>
ListView を含む XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent"
>
<Button android:text="@+id/Button01"
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"/>
<ListView android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/Button01"
android:gravity="center_horizontal"
/>
</RelativeLayout>
長い getView 関数:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView != null){
return convertView;
}
if (mDialog!=null){
final Choice thisChoice = mDialog.getChoice(
position,
mContentRes);
Log.v(TAG, "DialogAdapter: "+ thisChoice.toString());
View view = thisChoice.getView(
mInflater, parent, mFillInput, mDialog);
View.OnClickListener listener = new View.OnClickListener() {
public void onClick(View v) {
if (thisChoice.choiceSingleClick(mDialog)){
Log.i(TAG,
"Single Click selected Choice: "
+ thisChoice.toString());
Log.d(TAG,
"getNextInputId: "
+ Integer.toString(
thisChoice.getNextInputId()));
mFillInput.renderNext(thisChoice.getNextInputId());
}
else{
mFillInput.checkSelectedStatus();
}
}
};
view.setOnClickListener(listener);
View.OnLongClickListener longListener = new View.OnLongClickListener() {
public boolean onLongClick(View v) {
thisChoice.choiceLongClick(mDialog);
return false;
}
};
view.setOnLongClickListener(longListener);
Log.d(TAG, "thisChoice: " + thisChoice);
Log.d(TAG, "selected: " + thisChoice.isSelected());
if((position == 0 && mDialog.getSelectedCount() == 0) ||
thisChoice.isSelected()){
view.requestFocus();
}
if (thisChoice.isEnterStringChoice() & position==0){
Log.d(TAG, "Request Focus for StringChoice");
View edittext = view.findViewById(R.id.EditText01);
edittext.requestFocus();
//edittext.dispatchTouchEvent(null);
//FillInput.mInputMgr.showSoftInput(edittext, InputMethodManager.SHOW_FORCED);
//mFillInput.mInputMgr.toggleSoftInput(0, 0);
}
return view;
}
else{
return null;
}
}