[英]Sliding between activity with multiple fragments
在阅读文档时,片段之间会在视图之间滑动。 我正在将应用程序开发为Activity <-> Fragment关系,也就是说,我可以在一个Activity上包含多个片段。 我觉得这很明智,也更容易理解。 当我想将现有的带有2个片段的Activity转换为可能有多个片段的另一个Activity之间滑动时,就会出现我的问题。 我正在考虑“片段中的片段”,但是我对这种方法不满意。 我想知道是否可以在Android上执行此操作吗?
第二件事是,所有教程都指向一个片段,其中包含用于查看数据的占位符。 这样很容易实现。 但是我不是通过某种数据源进行分页,而是通过活动进行分页。 我需要某种方式在两个活动之间进行可靠的通信,以便ActivityB将数据发送到ActivityA。 尽管我没有实施很多活动来完成,但是只有两项活动。 我目前正在按照文档中的描述实施代码,但似乎这不是我想要的。 我看到一些做类似事情的应用程序,我也想要类似的功能。 有任何想法吗?
谢谢。
我现在有解决方案。 我所做的是创建了一个片段,它将添加2个子片段。 这两个子片段具有List和Filter片段。 而不是通过活动来完成,而是通过片段来完成。 如果有人遇到类似问题:
因此,这是“父片段”的样子:
package com.neonwarge.android.note;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
public class PagerActivity extends BackboneActivity implements NoteListSubFragment.NoteListCallback
{
private final static int NUM_PAGES = 2;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private int mCurrentPage;
private HomePageFragment mHomePageFragment;
private NoteDateSelectorFragment mNoteDateSelectorFragment;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.i(NoteApplication.TAG, "PagerActivity.onCreate() has been called.");
setTargetLayout(R.layout.activity_pager);
mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.activity_home_screen_pager);
mPager.setAdapter(mPagerAdapter);
mCurrentPage = 0;
mPager.setCurrentItem(mCurrentPage);
}
private class PagerAdapter extends FragmentStatePagerAdapter
{
public PagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch(position)
{
case 0:
mHomePageFragment = new HomePageFragment();
return mHomePageFragment;
case 1:
mNoteDateSelectorFragment = new NoteDateSelectorFragment();
return mNoteDateSelectorFragment;
default: break;
}
return null;
}
@Override
public int getCount()
{
return NUM_PAGES;
}
}
@Override
public void onNoteItemSelected(Note note , int type)
{
Intent intent = new Intent(this , NoteActivity.class);
intent.putExtra(NoteFragment.EXTRA_NOTE_ID, note.getNoteID());
intent.putExtra(NoteFragment.EXTRA_INSTANCE_TYPE, type);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityForResult(intent , 0);
}
@Override
public void onActivityResult(int request, int result, Intent intent)
{
super.onActivityResult(request, result, intent);
Log.i(NoteApplication.TAG, "PageActivity.onActivityResult() called.");
if(intent == null)
return;
switch(mCurrentPage)
{
case 0:
mHomePageFragment.updateSubFragments(request, result, intent);
break;
case 1:
break;
default:
Log.i(NoteApplication.TAG, "PagerActivity.onActivityResult(): page not supported.");
break;
}
}
}
在这里注意到,我想拥有的两个片段(最初由活动添加)现在被封装到名为HomePageFragment的父片段中。
这是我在HomePageFragment中添加两个子片段的方法:
public class HomePageFragment extends Fragment
{
private NoteListSubFragment mNoteListSubFragment;
private NoteFilterSubFragment mNoteFilterSubFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
setRetainInstance(true);
View v = inflater.inflate(R.layout.fragment_homescreen, container, false);
// add sub_fragments here.
FragmentManager cfm = getChildFragmentManager();
FragmentTransaction cft = cfm.beginTransaction();
mNoteListSubFragment = new NoteListSubFragment();
mNoteFilterSubFragment = new NoteFilterSubFragment();
cft.add(R.id.layout_fragment_container_filter, mNoteFilterSubFragment);
cft.add(R.id.layout_fragment_container_list, mNoteListSubFragment);
cft.commit();
return v;
}
public void updateSubFragments(int request, int result, Intent intent)
{
if(mNoteListSubFragment != null)
mNoteListSubFragment.onNoteListUpdated();
}
}
如您在这两行中所见:
cft.add(R.id.layout_fragment_container_filter, mNoteFilterSubFragment);
cft.add(R.id.layout_fragment_container_list, mNoteListSubFragment);
这实际上是针对此片段将出现在其上的FrameLayout。 最初,我只是简单地重用了Activity的布局文件,并将片段膨胀到各自的位置:
<?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"
android:baselineAligned="false"
android:padding="7dp">
<FrameLayout
android:id="@+id/layout_fragment_container_filter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/layout_fragment_container_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30"/>
</LinearLayout>
我希望这会对某人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.