Соты: несколько фрагментов в каждой вкладке на панели действий - PullRequest
1 голос
/ 01 февраля 2012

Я довольно новичок в Android и Java, и я хочу реализовать следующие функции в панели действий:

TAB 1: отображение фрагмента списка A и фрагмента списка B

TAB 2: отображение фрагмента списка C и фрагмента списка D

Я уже создал код для отображения представления с ListFragment A и Listfragment B, но без действия Bar. Я пытаюсь интегрировать панель действий с вкладками, и теперь она не работает, и я не могу выяснить, что не так, или найти сообщение с решением. Я использую активность для каждого фрагмента.

В данный момент я могу отобразить один фрагмент на каждой вкладке с панелью действий:

  • фрагмент A появляется, когда я нажимаю на вкладке 1

  • Фрагмент C появляется, когда я нажимаю на вкладке 2

Моя проблема: Когда я нажимаю на элемент во фрагменте A, фрагмент B появляется в новом представлении (= без панели действий и фрагмента A)

=> Как мне сделать так, чтобы отображалось в том же виде: Панель действий, Фрагмент A и Фрагмент B?

=> Я не совсем понимаю, как настроить панель действий для отображения в верхней части каждого представления. Это сделано в отдельном XML? Как это настроено? Должны ли мы вызывать панель действий поверх каждого действия?

=> Я действительно не понимаю, почему мне нужны 4 уровня xml для отображения этих фрагментов.

Для своего кода я использовал несколько учебных пособий по следующим ссылкам, но теперь я не могу найти ответ:

http://mobile.tutsplus.com/tutorials/android/android-sdk_fragments/

Добавление вкладок из http://www.devdiv.com/android/docs/guide/topics/ui/actionbar.html

dgn2_action_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/fragment_place">   
</LinearLayout>
</LinearLayout>

dgn2_synth_entry.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >   

        <fragment
            android:id="@+id/listFragment"
            android:layout_width="150dip"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_marginTop="?android:attr/actionBarSize"
            class="com.android.FragmentA" >      
        </fragment>

        <fragment
            android:id="@+id/detailSynthFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"
            class="com.android.FragmentB" >
            <!-- Preview: layout=@layout/details -->
        </fragment>

    </LinearLayout>

dgn2_synth_detail_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <fragment
            android:id="@+id/detailSynthFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.android.FragmentB" />

    </LinearLayout>

dgn2_details.xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >

          <ListView  
          android:id="@+id/resultFragmentView"
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent"
          android:divider="#ffffff" 
          />

    </LinearLayout>

Dgn2EntryActivity.java

public class Dgn2EntryActivity extends Activity implements      Dgn2SynthListFragment.OnSheetSelectedListener
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dgn2_action_bar);

    /* Setup Action Bar for tabs */
    ActionBar mActionBar = getActionBar();
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    /* add a new tab and set its title text */
    ActionBar.Tab tabSynthesis = mActionBar.newTab().setText(R.string.sSynthesisTab);
    ActionBar.Tab tabParameter = mActionBar.newTab().setText(R.string.sParameterTab);

    /* instantiate fragment for the tab */
    ListFragment mSynthesisFragment = new FragmentA();
    ListFragment mParamFragment = new FragmentC();    

    /* Set Listener on Tab Action */
    tabSynthesis.setTabListener(new MyTabsListener(mSynthesisFragment));
    tabParameter.setTabListener(new MyTabsListener(mParamFragment));

    /* Add Tab in Action Bar */
    mActionBar.addTab(tabSynthesis);
    mActionBar.addTab(tabParameter);
}

public void onSheetSelected(String sheetID, FragmentB viewer)
{     
    if (viewer == null || !viewer.isInLayout()) 
    {   
        /*initialise Fragment call */            
        Intent intent = new Intent(getApplicationContext(),FragmentBActivity.class);
        intent.putExtra("value", sheetID);
        startActivity(intent);
    } 
    else 
    {
        /* Update Fragment content after a click */
        viewer.updateSheet(sheetID);
    }    
} 

protected class MyTabsListener implements ActionBar.TabListener
{
    private ListFragment mFragment;

    public MyTabsListener(ListFragment mFragment)
    {
        this.mFragment = mFragment;
    }


    public void onTabSelected(Tab paramTab,
            FragmentTransaction paramFragment) 
    {
          paramFragment.add(R.id.fragment_place, mFragment, null);
    }

    public void onTabUnselected(Tab paramTab,
            FragmentTransaction paramFragment) 
    {
        paramFragment.remove(mFragment);        
    }
    public void onTabReselected(Tab paramTab,
            FragmentTransaction paramFragment) 
    {  
    }               
}
}

FragmentBActivity.java

public class FragmentBActivity extends Activity 
{    
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dgn2_synth_detail_layout);

    /* get Sheet Label */
    Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        String sheetLabel = extras.getString("value");
        FragmentB viewer = (FragmentB) getFragmentManager()
                .findFragmentById(R.id.detailSynthFragment);
        /*Update Fragment Viewer view content*/
        viewer.updateSheet(sheetLabel);
    } 
}    
}

FragmentA.java

public class FragmentA extends ListFragment 
{   
private OnSheetSelectedListener sheetSelectedListener;

 public interface OnSheetSelectedListener 
{
    public void onSheetSelected(String sheetID, FragmentB viewer);
} 

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) 
{
    super.onActivityCreated(savedInstanceState);
    String[] values = new String[] { GLOBAL_SYNTHESIS_LABEL, SYNTHESIS1_LABEL};
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) 
{       
    String item = (String) getListAdapter().getItem(position);
    FragmentB viewer = (FragmentB) getFragmentManager().findFragmentById(R.id.detailFragment);
    sheetSelectedListener.onSheetSelected(item, viewer);
}
}

FragmentB.java

public class FragmentB extends ListFragment 
{
Context mContext;
Dgn1DataListClass allResults = new Dgn1DataListClass(); 
String[] vIhmDgnVarNameList;
Dgn1ResultCouple[] results;  

@Override
public void onActivityCreated(Bundle savedInstanceState) 
{
    super.onActivityCreated(savedInstanceState);
    updateSheet(GLOBAL_SYNTHESIS_LABEL);
}

public void updateSheet(String sheetLabel) 
{
    mContext = getActivity();
    ListView resultListView =(ListView)getView().findViewById(R.id.resultFragmentView);

    if (sheetLabel == GLOBAL_SYNTHESIS_LABEL)
    {
        /* Displays A list in 2 columns */
        vIhmDgnVarNameList = getResources().getStringArray(R.array.ihm_dgn_row1_array);
        results = allResults.fillResults(vIhmDgnVarNameList);
        ListItemAdapter2 mcqListAdapter = new ListItemAdapter2(mContext,R.layout.ihm_dgn_row_data,results);
        setListAdapter(mcqListAdapter);
    }
    else if (sheetLabel == SYNTHESIS1_LABEL)
    {
            /* TODO */
    }
}

public class ListItemAdapter2 extends ArrayAdapter<Dgn1ResultCouple>
{
    /* Lot Of Code working*/  
}
}

Спасибо за вашу помощь

...