当我阅读文档时,视图之间的滑动发生在片段之间。我正在开发一个应用程序作为活动< - >片段关系,即我可以在单个活动上有多个片段。我觉得这很明智,更容易理解。当我想用2个片段转换我现有的Activity以在另一个可能有多个片段的活动之间滑动时,我的问题出现了。我正在考虑碎片中的碎片,但我对这种方法不满意。我想知道在Android上是否有办法做到这一点?
第二件事是,所有教程都指向一个片段,其中包含一个用于查看数据的占位符。以这种方式实现起来很容易。但我没有通过某种数据源进行分页,我正在通过活动进行分页。我需要以某种方式在两个活动之间进行可靠的通信,以便ActivityB将数据发送到ActivityA。虽然我没有实施许多活动,但只有2项活动。我目前正在实现文档中描述的代码,但似乎这不是我想要的。我看到一些类似的应用程序,我也想要类似的功能。有任何想法吗?
感谢。
答案 0 :(得分:0)
我现在有一个解决方案。我做的是我创建了一个片段,它将添加2个子片段。这2个子片段具有List和Filter片段。我没有通过Activity进行,而是通过Fragments完成的。如果有人遇到类似的问题:
所以这是父片段的样子:
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中添加两个Child-Fragments的方法:
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>
我希望这会对某人有所帮助。