2014-01-21 29 views
0

我有可扩展的ListView。如果我点击组视图,我想查找孩子大小,如果孩子大小为零,那么它将转到另一个活动,否则它会显示所有子视图。如何在Android中单击onBackPressed()方法时更新可展开列表视图?

这里我有一个问题,我的code.For例如,如果我的孩子大小为零,然后如果我点击groupview,它会去另一个活动。然后我压抑,然后我点击另一个组视图,它显示我的子视图的上一个大小是最后一个组视图(大小为零)。任何人都可以帮助我解决问题吗?

public class ExpandableListActivity extends Activity { 

    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 
    int group_position,child_position; 
    boolean flag=false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.expandable_list); 

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

     // preparing list data 
     prepareListData(); 

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


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

     expListView.setOnGroupClickListener(new OnGroupClickListener() { 

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


       if(child_position == 0){ 

        // TODO Auto-generated method stub 
        Intent intent=new Intent(ExpandableListActivity.this,MainActivity.class); 
        startActivity(intent); 

       } 

       return false; 
      } 
     }); 
    } 

    /* 
    * Preparing the list data 
    */ 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("Top 250"); 
     listDataHeader.add("Now Showing"); 
     listDataHeader.add("Coming Soon.."); 

     // Adding child data 
     List<String> top250 = new ArrayList<String>(); 
     top250.add("The Shawshank Redemption"); 
     top250.add("The Godfather"); 
     top250.add("The Godfather: Part II"); 
     top250.add("Pulp Fiction"); 
     top250.add("The Good, the Bad and the Ugly"); 
     top250.add("The Dark Knight"); 
     top250.add("12 Angry Men"); 

     List<String> nowShowing = new ArrayList<String>(); 
     nowShowing.add("The Conjuring"); 
     nowShowing.add("Despicable Me 2"); 
     nowShowing.add("Turbo"); 
     nowShowing.add("Grown Ups 2"); 
     nowShowing.add("Red 2"); 
     nowShowing.add("The Wolverine"); 

     List<String> comingSoon = new ArrayList<String>(); 
//  comingSoon.add("2 Guns"); 
//  comingSoon.add("The Smurfs 2"); 
//  comingSoon.add("The Spectacular Now"); 
//  comingSoon.add("The Canyons"); 
//  comingSoon.add("Europa Report"); 

     listDataChild.put(listDataHeader.get(0), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(1), nowShowing); 
     listDataChild.put(listDataHeader.get(2), comingSoon); 


    } 
    public class ExpandableListAdapter extends BaseExpandableListAdapter { 

     private Context _context; 
     private List<String> _listDataHeader; // header titles 
     // child data in format of header title, child title 
     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.expand_list_item, null); 
      } 

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

      txtListChild.setText(childText); 
      convertView.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent intent=new Intent(ExpandableListActivity.this,MainActivity.class); 
        startActivity(intent); 
       } 

      }); 

      return convertView; 
     } 

     @Override 
     public int getChildrenCount(int groupPosition) { 

      child_position=this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
        .size(); 
      group_position=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(final 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; 
     } 
    } 

回答

0

变化onGroupClick到:

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


       if(listAdapter.getChildrenCount(groupPosition) == 0){ 

        // TODO Auto-generated method stub 
        Intent intent=new Intent(ExpandableListActivity.this,MainActivity.class); 
        startActivity(intent); 

       } 

       return false; 
      } 

我也注意到的是,group_position没有任何地方使用,感染你甚至不分配给它的任何值。如果你有一些使用group_position变化如下:

@Override 
    public int getChildrenCount(int groupPosition) { 

     child_position=this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
     // group_position=groupPosition; <<<change to below>>> 
     ExpandableListActivity.this.groupPosition=groupPosition; 

     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 
+0

Yes.You是您reply.I correct.Thanks得到的答案如你所说。 – Rajesh

+0

如果它解决了您的问题,请不要忘记接受答案;-) –

相关问题