1


嘿,我想轉換我現有的應用程序使用Tabhost和活動到基於操作欄的應用程序與片段。在這個過程中遇到了這個問題來實現Expandable Lists。Android - 擴展名片段內

我還沒有在互聯網上找到關於如何實現這個可擴展列表的簡單例子。由於ExpandableListActivity沒有對應的片段,我認爲我需要使用和擴展ListFragment,但是由於我對android很新穎,我沒有得到任何線索。 :)

我會很高興,如果有人可以闡明如何使用碎片可擴展列表的一些情況。

謝謝。


附也是我現有的代碼片段。

片段1與已經兩個微調

public class Configurator_Fragment extends SherlockListFragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) { 
    } 
    final View v = inflater.inflate(R.layout.configurator_layout, 
      container, false); 

    final Spinner spinner = (Spinner) v 
      .findViewById(R.id.spinner1); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      getActivity(), R.array.array1, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    final Spinner spinner2 = (Spinner) v.findViewById(R.id.spinner2); 
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
      getActivity(), R.array.array2, 
      android.R.layout.simple_spinner_item); 
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner2.setAdapter(adapter2); 

    return v; 
} 
} 

FragmentActivity

public class TabActivity extends SherlockFragmentActivity { 
ViewPager mViewPager; 
TabsAdapter mTabsAdapter; 


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


    if (savedInstanceState == null) { 

     Fragment newFragment = new Configurator_Fragment(); 
     Fragment newFragment2 = new SecondFragment(); 

     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.pager, newFragment, "First"); 
     ft.add(R.id.pager, newFragment2, "Second"); 
     ft.commit(); 

    } 

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab tab1 = getSupportActionBar().newTab().setText("Fragment 1"); 
    ActionBar.Tab tab2 = getSupportActionBar().newTab().setText("Fragment 2"); 

    mViewPager = (ViewPager)findViewById(R.id.pager); 
    mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), mViewPager); 

     mTabsAdapter.addTab(tab1, Configurator_Fragment.class, null); 
     mTabsAdapter.addTab(tab2, SecondFragment.class, null); 


    if (savedInstanceState != null) { 
     getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt("index")); 
    } 

} 
@Override 
protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 
    outState.putInt("index", getSupportActionBar().getSelectedNavigationIndex()); 


} 
public static class TabsAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener, ActionBar.TabListener { 
    private final Context mContext; 
    private final ActionBar mBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 
    private FragmentTransaction mCurTransaction = null; 


    static final class TabInfo { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mBar = bar; 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<? extends Fragment> clss, Bundle args) { 
    TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 


    @Override 
    public Fragment getItem(int position) { 
    TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), info.args); 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
     mBar.setSelectedNavigationItem(position); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    Object tag = tab.getTag(); 
       for (int i=0; i<mTabs.size(); i++) { 
        if (mTabs.get(i) == tag) { 

          mViewPager.setCurrentItem(i); 
        } 
       } 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 

    } 
} 

} 
+0

'array1'是父組嗎?以及孩子們如何/在哪裏提供的?需要更多信息。 – Barak

回答

1

一對夫婦免責聲明第一...

1)我沒有用ABS,所以我不確定會發生什麼變化。
2)我的ExpandableListView由數據庫支持,而不是數組。我說這是因爲它看起來像你正在使用數組。無論如何,我希望它仍然可以爲你提供一些方向。

這就是說,我只是通過擴展Fragment來完成它。

public class EventListFragment extends Fragment { 

    private AttendanceDB mDbHelper; 
    public static Cursor mGroupsCursor; 
    private MyExpandableListAdapter mAdapter; 
    private String mGroup; 
    private String mChild; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.explistfragment, container, false); 
     header = (TextView) v.findViewById(R.id.header1); 
     header.setText(R.string.event_header); 
     return v; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Bundle extras = getIntent().getExtras(); 
     mGroup = extras.getString("Group"); 
     mChild = extras.getString("Child"); 
     mDbHelper = new AttendanceDB(getActivity()); 
     mDbHelper.open(); 
     fillData(mGroup, mChild); 
    } 

    private void fillData(String group, String child) { 
     ExpandableListView lv; 
     mGroupsCursor = mDbHelper.fetchGroup(group); 
     getActivity().startManagingCursor(mGroupsCursor); 
     mGroupsCursor.moveToFirst(); 
     lv = (ExpandableListView) getActivity().findViewById(R.id.explist); 

     mAdapter = new MyExpandableListAdapter(mGroupsCursor, getActivity(), 
       R.layout.explistlayout, 
       R.layout.explistlayout1, 
       new String[] { "_id" }, 
       new int[] { android.R.id.text1 }, 
       new String[] { child }, 
       new int[] { android.R.id.text1 }); 
     lv.setAdapter(mAdapter); 
    } 

    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { 

     public MyExpandableListAdapter(Cursor cursor, Context context, 
       int groupLayout, int childLayout, String[] groupFrom, 
       int[] groupTo, String[] childrenFrom, int[] childrenTo) { 
      super(context, cursor, groupLayout, groupFrom, groupTo, 
        childLayout, childrenFrom, childrenTo); 
     } 
     @Override 
     protected Cursor getChildrenCursor(Cursor groupCursor) { 
      Cursor childCursor = mDbHelper.fetchChildren(mGroup, groupCursor 
        .getString(groupCursor 
          .getColumnIndex(AttendanceDB.EVENT_ROWID))); 
      getActivity().startManagingCursor(childCursor); 
      childCursor.moveToFirst(); 
      return childCursor; 
     } 
    } 

} 
+0

感謝您的回答,但我無法弄清楚它如何與數組一起工作或需要進行哪些更改。 – Maddin