我的應用程序由左側的列表視圖組成,它充當菜單。通過點擊列表項目,我動態替換片段。目前,這隻適用於特定情況。如何在ListView上單擊動態替換片段?
看看我的回調方法,也就是負責更換:
public void onNavigationDrawerFragmentItemSelected(int position) {
switch(position) {
case 0:
if(!mTwoPanelsUsed) {
getFragmentManager().beginTransaction().replace(R.id.content_frame, mListFragment).addToBackStack(null).commit();
} else {
findViewById(R.id.container_2).setVisibility(View.VISIBLE);
getFragmentManager().beginTransaction()
.replace(R.id.container_1, mListFragment)
.replace(R.id.container_2, mDetailsFragment)
.addToBackStack(null).commit();
}
break;
case 1:
if(!mTwoPanelsUsed) {
getFragmentManager().beginTransaction().replace(R.id.content_frame, mRecordFragment).addToBackStack(null).commit();
} else {
getFragmentManager().beginTransaction().replace(R.id.container_1, mRecordFragment).addToBackStack(null).commit();
findViewById(R.id.container_2).setVisibility(View.INVISIBLE);
}
break;
case 2:
if(!mTwoPanelsUsed) {
getFragmentManager().beginTransaction().replace(R.id.content_frame, mSettingsFragment).addToBackStack(null).commit();
} else {
getFragmentManager().beginTransaction().replace(R.id.container_1, mSettingsFragment).addToBackStack(null).commit();
findViewById(R.id.container_2).setVisibility(View.GONE);
}
break;
case 3:
if(!mTwoPanelsUsed) {
getFragmentManager().beginTransaction().replace(R.id.content_frame, mAboutFragment).addToBackStack(null).commit();
} else {
getFragmentManager().beginTransaction().replace(R.id.container_1, mAboutFragment).addToBackStack(null).commit();
findViewById(R.id.container_2).setVisibility(View.GONE);
}
break;
default:
break;
}
}
一切工作正常,但情況下0。這一件作品只在第一次。在我更改爲另一個片段後,container_1的mListFragment不顯示。屏幕上只有一個白色字段。
這是我的佈局XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
android:id="@+id/recording_view"
tools:context=".RecordingListActivity">
<!-- static drawer navigation -->
<fragment
android:id="@+id/navigation_drawer"
android:layout_width="180dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.iav.viraprecorder.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer"/>
<!-- dynamic content -->
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:id="@+id/container_1"></FrameLayout>
<!-- dynamic content -->
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:id="@+id/container_2"></FrameLayout>
</LinearLayout>
有人能告訴我,如何使該mListFragment再次可見?
謝謝!
編輯1:
編輯2:
代碼
從訪問另一個之後回到第一個菜單項截圖:
從App開始截圖mListFragment別名RecordingListFragment:
package com.iav.viraprecorder;
import android.app.Activity;
import android.app.Fragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.iav.viraprecorder.model.DummyData;
public class RecordingListFragment extends ListFragment {
// log tag
private static final String TAG = RecordingListFragment.class.getName();
private RecordingListFragmentCallbacks mRecordingListFragmentCallbacks = sDummyRecordingListFragmentCallbacks;
private ListView mListView;
private RecordingListAdapter mAdapter;
public RecordingListFragment() {
}
private static RecordingListFragmentCallbacks sDummyRecordingListFragmentCallbacks = new RecordingListFragmentCallbacks() {
@Override
public void onRecordingListFragmentItemSelected(String id) {
}
};
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof RecordingListFragmentCallbacks)) {
throw new IllegalStateException("Activity must implement fragment's callbacks.");
}
mRecordingListFragmentCallbacks = (RecordingListFragmentCallbacks) activity;
}
@Override
public void onDetach() {
super.onDetach();
// Reset the active callbacks interface to the dummy implementation.
mRecordingListFragmentCallbacks = sDummyRecordingListFragmentCallbacks;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_recording_list, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mListView = getListView();
mAdapter = new RecordingListAdapter(getActivity(), DummyData.getRecordingList());
mListView.setAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
mRecordingListFragmentCallbacks.onRecordingListFragmentItemSelected(
DummyData.getRecordingList().get(position).getId());
}
public interface RecordingListFragmentCallbacks {
public void onRecordingListFragmentItemSelected(String recordingId);
}
}
要導航側抽屜嗎? – Roon13
我已將左側的導航抽屜作爲菜單。在此旁邊,有一個「錄音」列表,旁邊是所選錄音的詳情視圖(情況0)。我想恢復放置在container_1(中間)的錄音列表。 – tellob
如果你把截圖然後它將是非常有用的瞭解問題 – Roon13