在 activity 中重用片段 class
Reusing a fragment class inside an activity
由于我不熟悉 Fragments,所以我对 Whosebug 上提供的解决方案感到很困惑。我尝试了许多不同的技术来完成这项任务:我有一个名为 MapFragment 的 class 扩展了 Fragment。它在我的 viewpager 中运行良好。但是,我想从另一个 activity 中重用这个 class。这是我的片段中名为 MapFragment 的示例:
public class MapFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_mapview, container, false);
mapView = (MapView) rootView.findViewById(R.id.fragment_mapView);
mapView.onCreate(savedInstanceState);
this.setHasOptionsMenu(true);
activity.getActionBar().setDisplayHomeAsUpEnabled(true);
initGPS();
initViews();
initListeners();
Bundle extras = getArguments();
String url = "";
if(extras.containsKey("url"))
url = extras.getString("url");
new LoadMarkers().execute(url);
return rootView;
}
}
假设我有另一个 activity,我想用来重用上面的这个 mapfragment:
public class MapActivity extends GeneralActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I want to be able to display the MapFragment inside this activity
// What Should I Do Here????
enter code here
}
}
然后我可以从程序中的任何位置调用 MapActivity 上的意图,知道它会在其中显示 MapFragment。这有可能实现吗?
为您的 activity class MapActivity 创建布局。说 activity_map.xml
粗略片段
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frag_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
在你的 activity class,
public class MapActivity extends GeneralActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I want to be able to display the MapFragment inside this activity
// What Should I Do Here????
// enter code here
setContentView(R.layout.activity_map);
Fragment fragment = new MapFragment();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.frag_container, fragment)
.commit();
}
}
此外,在您的片段代码中,您需要一个包。确保检查此捆绑包是否不为空。由于使用上面的代码,我们没有传递任何数据 (setArguments)。
希望对您有所帮助!
如果您的 activity 扩展了 ActionBarActivity 那么:
setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}
如果没有:
setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
getFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}
其中 containerViewId
是您要放置片段的 activity (some_layout
) 布局的 ID。
由于我不熟悉 Fragments,所以我对 Whosebug 上提供的解决方案感到很困惑。我尝试了许多不同的技术来完成这项任务:我有一个名为 MapFragment 的 class 扩展了 Fragment。它在我的 viewpager 中运行良好。但是,我想从另一个 activity 中重用这个 class。这是我的片段中名为 MapFragment 的示例:
public class MapFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_mapview, container, false);
mapView = (MapView) rootView.findViewById(R.id.fragment_mapView);
mapView.onCreate(savedInstanceState);
this.setHasOptionsMenu(true);
activity.getActionBar().setDisplayHomeAsUpEnabled(true);
initGPS();
initViews();
initListeners();
Bundle extras = getArguments();
String url = "";
if(extras.containsKey("url"))
url = extras.getString("url");
new LoadMarkers().execute(url);
return rootView;
}
}
假设我有另一个 activity,我想用来重用上面的这个 mapfragment:
public class MapActivity extends GeneralActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I want to be able to display the MapFragment inside this activity
// What Should I Do Here????
enter code here
}
}
然后我可以从程序中的任何位置调用 MapActivity 上的意图,知道它会在其中显示 MapFragment。这有可能实现吗?
为您的 activity class MapActivity 创建布局。说 activity_map.xml
粗略片段
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frag_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
在你的 activity class,
public class MapActivity extends GeneralActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I want to be able to display the MapFragment inside this activity
// What Should I Do Here????
// enter code here
setContentView(R.layout.activity_map);
Fragment fragment = new MapFragment();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.frag_container, fragment)
.commit();
}
}
此外,在您的片段代码中,您需要一个包。确保检查此捆绑包是否不为空。由于使用上面的代码,我们没有传递任何数据 (setArguments)。
希望对您有所帮助!
如果您的 activity 扩展了 ActionBarActivity 那么:
setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}
如果没有:
setContentView(R.layout.some_layout);
if(savedInstanceState == null) {
getFragmentManager().beginTransaction().add(containerViewId, new MapFragment(), "MapFragment").commit();
}
其中 containerViewId
是您要放置片段的 activity (some_layout
) 布局的 ID。