2012-01-06 35 views
1

为什么Log未打印? 所有其他人的日志正在工作,但不是为了孩子。onChildClickListener在ExapandableListView中未响应

文本视图的日志确实出现,但是当我使用编辑文本时,它不起作用。

为什么这么说?我哪里错了?

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

回答

0
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; 
    } 
} 
+0

没有....没有结果....通过使可编辑的虚假事实...它已经停止向我显示我需要的键盘。 – 2012-01-09 06:53:31

+0

你可以在EditText或ListItem上有焦点事件,我建议你让editText完全不可编辑,因为它会获得焦点/选择/点击事件,如果你需要在editText上键盘/焦点事件,为什么不在editText上添加一个监听器在getChildView方法中。 – jeet 2012-01-09 07:00:01

+0

我完成了,但它是交换的问题。我在一个编辑文本中编写了一些东西,但它反映在其他编辑文本中。 – 2012-01-09 07:04:32

3

没有看到代码,这只是一个猜测,但childCLickListener可使用该事件所以它不是到达编辑文字,尝试在childClickListener

返回false

编辑

好吧,我刚刚创建了一个小的项目,你r代码,我无法让onCildClickListener触发,将其更改为TextView,并且工作正常。它与EditText有关(可能是它消耗事件,或者它没有注册为点击,但是作为焦点的变化,但我只是在猜测这一点)。

所以在回答你的问题时,有可能 - 我不这么认为。但是我做了一个可能有用的小解决方法。

连接的onTouchListener()到的EditText和检查MotionEvent.ACTION_DOWN

0

myList.setOnChildClickListener(listAdapter);

在onCreate方法。

然后onChildClick方法立即开始工作。