2つのグループを持つアクティビティにExpandableListViewがあります。各グループにはカスタムビューがあります。私は各グループのボタンをクリックすることができ、それは動作します。あるグループのカスタムビューでテキストフィールドをクリックすると、ソフトキーボードが表示されます。しかし、それを却下すると、いずれのグループにもクリックは記録されません。 ExpanableListViewは、キーボードが閉じられた後にフォーカスを失います。ダイアログを閉じた後、リストビューにフォーカスを戻すにはどうすればよいですか?グループを崩壊させて展開すると、グループはリセットされます。私は役に立たないために様々なリスナーを試みました。ExpandableListViewのカスタムビューでクリックイベントが発生しない
私のクラスとレイアウトはもう少し複雑ですが、私はそれを最小限にとどめて、ここで私のコードです。
package com.test;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
public class TestOnClickActivity extends Activity
{
private static final String cLogTag = "TestOnClick";
private ExpadableAdapter iExpandableListAdapter;
private ExpandableListView iExpandableList;
private View[] iSearchViews;
private class ExpadableAdapter extends BaseExpandableListAdapter
{
private String[] iGroups =
{
"Search By Device",
"Search By Date",
};
@Override
public Object getChild(int theGroupPosition, int theChildPosition)
{
return "NA";
}
@Override
public long getChildId(int theGroupPosition, int theChildPosition)
{
return theGroupPosition;
}
@Override
public int getChildrenCount(int theGroupPosition)
{
return 1;
}
@Override
public View getChildView(int theGroupPosition,
int theChildPosition,
boolean isLastChild,
View theConvertView,
ViewGroup theParent)
{
return iSearchViews[theGroupPosition];
}
@Override
public Object getGroup(int theGroupPosition)
{
return iGroups[theGroupPosition];
}
@Override
public int getGroupCount()
{
return iGroups.length;
}
@Override
public long getGroupId(int theGroupPosition)
{
return theGroupPosition;
}
@Override
public View getGroupView(int theGroupPosition,
boolean theIsExpanded,
View theConvertView,
ViewGroup theParent)
{
if (theConvertView == null) {
Context theContext = TestOnClickActivity.this;
TextView theTV = new TextView(theContext,
null,
android.R.attr.textAppearanceMedium);
theTV.setText(iGroups[theGroupPosition]);
return theTV;
} else {
return theConvertView;
}
}
@Override
public boolean hasStableIds()
{
return true;
}
@Override
public boolean isChildSelectable(int theGroupPosition,
int theChildPosition)
{
return true;
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle theSavedState)
{
super.onCreate(theSavedState);
setContentView(R.layout.main);
iExpandableListAdapter = new ExpadableAdapter();
iExpandableList =
(ExpandableListView) findViewById(R.id.searchOptionsListView);
iExpandableList.setAdapter(iExpandableListAdapter);
iExpandableList.setGroupIndicator(null);
createSearchViews();
}
private void createSearchViews()
{
iSearchViews = new View[2];
LinearLayout theRowView;
// Create the Search By Device View
LayoutInflater theInflator = (LayoutInflater) getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
theRowView = new LinearLayout(this);
theInflator.inflate(R.layout.search1, theRowView, true);
iSearchViews[0] = theRowView;
// Create the Search By Date View
theRowView = new LinearLayout(this);
theInflator.inflate(R.layout.search2, theRowView, true);
iSearchViews[1] = theRowView;
}
}
レイアウトファイルは、損失の問題私の意見では
<?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="match_parent"
android:orientation="vertical" >
<ExpandableListView
android:id="@+id/searchOptionsListView"
android:divider="@android:color/transparent"
android:childDivider="#00000000"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ExpandableListView>
</LinearLayout>
search1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/searchByDeviceIdLinearLayout"
android:paddingLeft="36dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:text="@string/deviceId"/>
<EditText
android:id="@+id/deviceIdEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number" >
</EditText>
<ImageButton
android:id="@+id/searchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/search"
android:src="@drawable/ic_btn_search" />
</LinearLayout>
とsearch2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/searchByDateLinearLayout"
android:paddingLeft="36dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp">
<ImageButton
android:id="@+id/searchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/search"
android:src="@drawable/ic_btn_search" />
</LinearLayout>
私のグループの名前は、クリックするたびに変わりません。あなたのコードと私の違いは、onCreateで一度行ビューを作成し、getGroupViewとgetChildViewが呼び出されるたびにコードがそれらを設定しているようです。私はそれを試してみて、違いがあるかどうかを見てみましょう。 – Milind