2017-03-16 7 views
0

私の特定のプログラムについては疑問があります。なぜなら、「アダプタ」と呼び出し元のExpandableListViewオブジェクトこのオブジェクト。リストの要素を表示するとき、onChildClickに問題があります。リスト内の項目を押すとTextViewに保存され、後で使用するように表示されます。これは私のプログラムなので、他の要素を叩いたときに押されたときに最初の要素だけがリストから取り出されます。アプリケーションはエラーを出さずに動作を停止します。これを解決するために私は何ができますか?どうもありがとうございました。setOnChildClickListenerで表示される要素を取得するにはどうすればいいですか?

これは私が

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader ; 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, 
           HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

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

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

     final String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_item, null); 
     } 

     TextView txtListChild = (TextView) convertView 
       .findViewById(R.id.lblListItem); 

     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_group, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

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

でGetChild電話して、私は、リストから項目を取得したいところこれがであるExpandibleListの目的です。

public class MainActivityFragment extends Fragment { 

//Expandable list Adapter 
    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 

    //Users 
    private List <User> items = new ArrayList<>(); 

    //Obejeto a pasar 
    User user = new User(); 
    String password; 

@Override 
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
          Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.fragment_main, container, false); 

     //Botones 
     TextPass = (EditText) view.findViewById(R.id.IdpasswordUser); 
     TextName = (TextView) view.findViewById(R.id.text1); 

     // get the listview 
     expListView = (ExpandableListView) view.findViewById(R.id.lvExp); 

     // preparing list data 
     prepareListData(); 

     listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); 

     // setting list adapter 
     expListView.setAdapter(listAdapter); 

     ExpandableListView ExList =(ExpandableListView) view.findViewById(R.id.lvExp) ; 



       //Llamamos al boton fichar 
     fichar = (Button) view.findViewById(R.id.fichar); 

//Call ExpandibleList view child on pressed 

     ExList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 

       ShowItem(listDataHeader.get(childPosition)); 

       TextName.setText(listAdapter.getChild(groupPosition,childPosition).toString()); 

       return false; 
      } 
     }); 

     fichar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       password = TextPass.getText().toString(); 
       //SuperUsuario 
       if(key.equalsIgnoreCase("cesi.tic")&&password.equalsIgnoreCase("123456789")){ 
        ((MainActivity) getActivity()).EditarUsuario(); 
        fichar.setVisibility(view.INVISIBLE); 
        TextPass.setVisibility(view.INVISIBLE); 
        TextDNI.setVisibility(view.INVISIBLE); 
       }else{ 
        LeerFirebase(); 
       } 

      } 
     }); 
     return view; 
    } 
    public void ShowItem(String id) 
    { 
     // do something 
    } 
} 

どのように私はsetOnChildClickListener

答えて

0

オーケーで表示要素を取得することができ、私はすでに問題を解決してきました。私はただ削除する必要があります // ShowItem(listDataHeader.get(childPosition));

のでonChildClickは次のようになります。

expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 

       TextName.setText(listAdapter.getChild(groupPosition,childPosition).toString()); 

       return false; 
      } 
     }); 
関連する問題