onChildClickListener не отвечает в ExapandableListView - PullRequest
1 голос
/ 06 января 2012

Почему журнал не печатается? Журнал для всех остальных работает, но не для ребенка.

Журнал для просмотра текста действительно появляется, но когда я использую текст редактирования, он не работает.

Почему так? Куда я иду не так?

ExpandableListView expListView;

expListView = getExpandableListView();

expListView.setAdapter(new ExAdapter(this));

        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            @Override
            public void onGroupExpand(int groupPosition) {
                // TODO Auto-generated method stub

            }

        });

        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                // TODO Auto-generated method stub

            }

        });

        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                Log.i("Tag", "-------------------------------------------------");
                return true;
            }

        });

код отредактирован ---------

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.name_child, null);

    }

    TextView txtFName = (TextView) convertView.findViewById(R.id.txtFname);
    txtFName.setText(arrChildhintelements[groupPosition][childPosition]);


    editFName = (EditText) convertView.findViewById(R.id.editFName);
    editFName.setHint(arrChildhintelements[groupPosition][childPosition]);


    editFName.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            //doing somthing....

            return false;
        }

    }); 

    return convertView;
} 

Ответы [ 3 ]

3 голосов
/ 09 января 2012

Не видя код, это всего лишь предположение, но childCLickListener может потреблять событие, поэтому оно не достигает текста редактирования, попробуйте вернуть false в childClickListener

Редактировать

Хорошо, я только что создал небольшой проект с вашим кодом, и я не смог запустить onCildClickListener, изменив его на TextView, и он отлично работает. Это как-то связано с EditText (возможно, он потребляет событие или регистрируется не как щелчок, а как изменение фокуса, но я просто догадываюсь на данный момент).

Так что в ответ на ваш вопрос, возможно ли это - я так не думаю. Но я сделал небольшой обходной путь, который может пригодиться.

Присоедините onTouchListener () к EditText и проверьте наличие MotionEvent.ACTION_DOWN

0 голосов
/ 22 декабря 2016

Поместите

myList.setOnChildClickListener(listAdapter);

в ваш метод onCreate.

Затем метод onChildClick мгновенно начнет работать.

0 голосов
/ 09 января 2012
public class TryTestActivity extends ExpandableListActivity {

    ExpandableListAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[] titles = {"A","B","C"};
        String[] fruits = {"a1","a2"};
        String[] veggies = {"b1","b2","b3"};
        String[] meats = {"c1","c2"};
        String[][] contents = {fruits,veggies,meats};
        String[][] edit_contents = {fruits,veggies,meats};

        SimplerExpandableListAdapter adapter = new SimplerExpandableListAdapter(this,titles, contents, edit_contents);
        setListAdapter(adapter);


        getExpandableListView().setOnChildClickListener(this);



    }



}
class SimplerExpandableListAdapter extends BaseExpandableListAdapter {

    private Context mContext;
    private String[][] mContents;
    private String[] mTitles;
    LayoutInflater inflater;
    private CharSequence[][] mEditContents;

    public SimplerExpandableListAdapter(Context context, String[] titles, String[][] contents, String[][] editContents) {
        super();

        if(titles.length != contents.length) {
            throw new IllegalArgumentException("Titles and Contents must be the same size.");
        }
        mContext = context;
        mContents = contents;
        mTitles = titles;
        mEditContents = editContents;

        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return mEditContents[groupPosition][childPosition];
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return groupPosition*childPosition;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) { 


        //if(convertView == null) 
        {

            convertView = inflater.inflate(R.layout.child_main, null);
        }

        TextView row1 = (TextView)convertView.findViewById(R.id.txt1);
        EditText row2 = (EditText)convertView.findViewById(R.id.txt2);

        row1.setText(mContents[groupPosition][childPosition]);
        row2.setText(mEditContents[groupPosition][childPosition]);

        row2.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable s) {
                mEditContents[groupPosition][childPosition]=s.toString();
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after){}
            public void onTextChanged(CharSequence s, int start, int before, int count){
                //mEditContents[groupPosition][childPosition]=s.toString();
            }
        });
        //row2.on
        /*row2.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //some code...
                    return false;
                }

            });*/

        return convertView;
    }

    @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 groupPosition;
    }

    @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 true;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}
...