Я довольно новичок в 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*/
}
}
Спасибо за вашу помощь