2012-06-27 113 views
0

我正在嘗試從我的可擴展列表的子項開始一個活動此框架取自Android SDK中的示例,並且是我的應用程序的核心。這裏是代碼,我會識別哪些區域不工作。動態從可擴展列表動態地開始活動

package com.soraingraven.suprRef; 

import android.app.ExpandableListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.TextView; 

public class SuperReferenceActivity extends ExpandableListActivity { 
    ExpandableListAdapter mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Set up our adapter 
     mAdapter = new MyExpandableListAdapter(); 
     setListAdapter(mAdapter); 
     //registerForContextMenu(getExpandableListView()); 
     getExpandableListView().setOnChildClickListener(this); 
    } 

    @Override 
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
     super.onListItemClick(parent, v, groupPosition, childPosition, id); 
     String testName[][] = children[groupPosition][childPosition]; 
     try { 
      Class clazz = Class.forName("com.soraingraven.suprRef." + testName); 
      Intent intent = new Intent(this, clazz); 
      startActivity(intent); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     }  
     // use groupPosition and childPosition to locate the current item in the adapter 
     return true; 
    } 

    /*@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     menu.setHeaderTitle("Sample menu"); 
     menu.add(0, 0, 0, "Sample action"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 
     String title = ((TextView) info.targetView).getText().toString(); 

     int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
     if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
      int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
      int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
      Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos, 
        Toast.LENGTH_SHORT).show(); 
      return true; 
     } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
      int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
      Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return false; 
    }*/ //Context Menu Stuff May or may not use 

    //Indexes for all the options 
    public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
     private String[] groups = {"Math Formulas and Equations"};         //Main Menu 

     private String[][] children = {                //Sub Menus 
       { "PerfectGasLaw" }                //Math Equations Sub Menu   
     }; 

     public Object getChild(int groupPosition, int childPosition) { 
      return children[groupPosition][childPosition]; 
     } 

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

     public int getChildrenCount(int groupPosition) { 
      return children[groupPosition].length; 
     } 

     public TextView getGenericView() { 
      AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT, 128); 
      TextView textView = new TextView(SuperReferenceActivity.this); 
      textView.setLayoutParams(lp); 
      textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
      textView.setPadding(128, 0, 0, 0); 
      return textView; 
     } 

     public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
       View convertView, ViewGroup parent) { 
      TextView textView = getGenericView(); 
      textView.setText(getChild(groupPosition, childPosition).toString()); 
      return textView; 
     } 

     public Object getGroup(int groupPosition) { 
      return groups[groupPosition]; 
     } 

     public int getGroupCount() { 
      return groups.length; 
     } 

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

     public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
       ViewGroup parent) { 
      TextView textView = getGenericView(); 
      textView.setText(getGroup(groupPosition).toString()); 
      return textView; 
     } 

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

     public boolean hasStableIds() { 
      return true; 
     } 
    } 
} 

Line 31我無法弄清楚如何讓超級引用類接受children數組,因爲它被列爲另一個類的私有類。請幫忙。我不確定是否需要在活動類中創建二維數組,並將它包含在子元素中的數據或完全需要完成的數據傳遞給它。謝謝。

回答

0

你試圖串聯一個2d字符串數組到一個字符串!刪除[] []

String testName = children[groupPosition][childPosition]; 
    try { 
     Class clazz = Class.forName("com.soraingraven.suprRef." + testName); 
+0

我做了一個類型testname一個二維字符串數組,但兒童超出此功能的範圍。在不破壞現有列表的情況下將其納入正確範圍的最佳方式是什麼? – user1183668

+0

最簡單的方法是將它作爲您活動中具有範圍的私人課程。 –

+0

看起來onchild click是一個在監聽器下自動調用的函數。所以你不能添加參數,這是你需要做的,以將兒童作爲字符串數組傳遞給函數。所以即時通訊使用開關案例和組和子位置數據來確定選擇什麼,而不是像id一樣動態,但解決方案是一個解決方案。 – user1183668