2012-01-06 3 views
1

ログが印刷されないのはなぜですか? 他のすべてのログは機能していますが、子のログは機能していません。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

いいえ....いいえ結果....編集可能なfalseにすることでInfact ...それは私に必要なキーボードを表示するのを停止しました。 –

+0

EditTextまたはListItemのいずれかにフォーカスイベントを設定することができます。editTextにキーボード/フォーカスイベントが必要な場合は、editTextにリスナーを追加しないと、フォーカス/選択/クリックイベントを取得するためeditTextを編集できないようにするgetChildViewメソッド内。 – jeet

+0

私はそれで終わったが、それは交換の問題を与えている。 1つの編集テキストに何かを書きますが、他の編集テキストに反映されています。 –

3

コードを見ずに、これは単なる推測ですが、その編集に到達しないようchildCLickListenerはイベントを消費することができますテキスト、オーケー編集

childClickListener

にfalseを返すしてみてください私はあなたと小さなプロジェクトを作成しましたrコードと私は、TextViewに変更し、それが正常に動作するonCildClickListenerを得ることができませんでした。それはEditTextと関係があります(イベントを消費したり、クリックとして登録されていないが、フォーカスの変更として登録されているかもしれませんが、私はこの時点で推測しています)。

あなたの質問に答えて、それは可能です - そうは思わない。しかし、私は使用可能な小さな回避策を作成しました。

のEditTextにonTouchListener()を添付しMotionEvent.ACTION_DOWN

0

を確認するには、あなたのonCreateメソッド内

myList.setOnChildClickListener(listAdapter);

を入れてください。

次に、onChildClickメソッドが即座に動作を開始します。

関連する問題