ExpandableListView の中で、EditText を表示して入力エリアを折りたたんだり、開いたりする場合、
なぜなのか判らないが、日本語入力を始めるとフォーカスが外れてしまう。
requestFocus をすることで解決する。
以下の画面のような ExpandableListView の中に EditTextがフルに収まった画面が欲しくて書いてみた。
でも、1つできなかったことがある。EditText の範囲選択のハンドルが表示されない。
どうしたら表示できるようになるだろうか?
ExpandableListView の Group View1個、Child 1個の構成で
リストアダプタは、SimpleExpandableListAdapter を使いながらも、
getChildView をオーバーライドして EditTextを埋め込んでしまう。
SimpleExpandableListAdapter のコンストラクタでは、Child のレイアウト、EditText のレイアウトXMLのID や、
表示文字列は、NULL を渡してしまう。
getChildrenCount も1を返すようにする。
初期表示の初期入力値なども設定できる形式にする。
ExpandableListView mExpandableListView;
EditText mEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
window.requestFeature(Window.FEATURE_LEFT_ICON);
setContentView(R.layout.expand_edit);
window.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_launcher);
// ExpandableListView の Group 表示用のデータを用意
List<Map<String,String>> groupList = new ArrayList<Map<String,String>>();
Map<String,String> map = new HashMap<String,String>();
map.put("title", "Note"); // → どうしても Map を用意する必要がある。
groupList.add(map);
mExpandableListView = (ExpandableListView)findViewById(R.id.expandableListView1);
final SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this
, groupList, R.layout.expand_group_layout, new String{ "title" }, new int{ R.id.textView1 }
, null, 0, null, null
){
LayoutInflater infrator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public View getChildView(int groupPosition,int childPosition,boolean isLastChild,View convertView,ViewGroup parent){
if (mEditText==null){
mEditText = (EditText)infrator.inflate(R.layout.expand_edittextview,null);
mEditText.setText(getInitNote());
}
mEditText.requestFocus();
return mEditText;
}
@Override
public int getChildrenCount(int groupPosition){
return 1;
}
};
mExpandableListView.setAdapter(adapter);
// ExpandableListView 開く時
mExpandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener(){
@Override
public void onGroupExpand(int groupPosition){
// ソフトキーボードを表示する
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(mExpandableListView, 0);
}
});
// ExpandableListView 閉じる時
mExpandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener(){
@Override
public void onGroupCollapse(int groupPosition){
// ソフトキーボードを閉じる
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(mExpandableListView.getWindowToken(), 0);
}
});
// Button クリック等で、mEditText.getText().toString() を実行する
}
/*
* Expand の中の EditText の初期値
*/
protected String getInitNote(){
return "abc\n11111111\n22222222\n";
}
expand_edittextview.xml の内容、、、
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ems="10"
android:inputType="textMultiLine" >
</EditText>