I am a new bee to android.
I am working with ExpandableListViewAdapter and facing a problem.
The onChildClickListener is not working when I click on the edit text box.
My question is will it work on edit text box or not.
I am implementing the BaseExpandableListAdapter.
Thanks in advance.
public class TryExpandableListViewActivity extends Activity implements OnChildClickListener {
LinearLayout llayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
llayout = (LinearLayout) findViewById(R.id.llayout);
ExpandableListView list = new ExpandableListView(this);
list.setGroupIndicator(null);
list.setChildIndicator(null);
String[] titles = {"A","B","C"};
String[] fruits = {"a1","a2"};
String[] veggies = {"b1","b2","b3"};
String[] meats = {"c1","c2"};
String[][] contents = {fruits,veggies,meats};
SimplerExpandableListAdapter adapter = new SimplerExpandableListAdapter(this,titles, contents);
list.setAdapter(adapter);
llayout.addView(list);
list.setOnChildClickListener(this);
}
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Log.i("Test","-------------------------------------------");
return false;
}
}
class SimplerExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private String[][] mContents;
private String[] mTitles;
public SimplerExpandableListAdapter(Context context, String[] titles, String[][] contents) {
super();
if(titles.length != contents.length) {
throw new IllegalArgumentException("Titles and Contents must be the same size.");
}
mContext = context;
mContents = contents;
mTitles = titles;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mContents[groupPosition][childPosition];
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
EditText row = (EditText)convertView;
if(row == null) {
row = new EditText(mContext);
}
row.setTypeface(Typeface.DEFAULT_BOLD);
row.setText(mContents[groupPosition][childPosition]);
return row;
}
@Override
public int getChildrenCount(int groupPosition) {
return mContents[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return mContents[groupPosition];
}
@Override
public int getGroupCount() {
return mContents.length;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView row = (TextView)convertView;
if(row == null) {
row = new TextView(mContext);
}
row.setTypeface(Typeface.DEFAULT_BOLD);
row.setText(mTitles[groupPosition]);
return row;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Without seeing code this is just a guess but the childCLickListener may be consuming the event so its not reaching the edit text, try returning false in childClickListener
Edit
Okay I just created a small project with your code and I couldn’t get the onCildClickListener to fire, changing it to a TextView and it works fine. Its something to do with the EditText (perhaps its consuming the event or its not registering as a click but as a change in focus but I’m just guessing at this point).
So in answer to your question, is it possible – I don’t think so. But I did make a small workaround that may be of use.
Attach an
onTouchListener()to the EditText and check forMotionEvent.ACTION_DOWN