Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在具有多个片段的活动之间滑动_Android_Android Layout_Android Fragments - Fatal编程技术网

Android 在具有多个片段的活动之间滑动

Android 在具有多个片段的活动之间滑动,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,当我阅读文档时,在片段之间会发生视图之间的滑动。我正在开发一个应用程序作为ActivityFragment关系,也就是说,我可以在单个活动上有多个片段。我觉得这是明智的,更容易理解。当我想将包含2个片段的现有活动转换为在另一个可能包含多个片段的活动之间滑动时,就会出现问题。我正在考虑片段中的片段,但我对这种方法感到不舒服。我想知道是否有一种方法可以在Android上实现这一点 第二件事是,所有教程都指向一个片段,其中包含用于查看数据的占位符。以这种方式很容易实现。但我并不是通过某种数据源进行分页

当我阅读文档时,在片段之间会发生视图之间的滑动。我正在开发一个应用程序作为ActivityFragment关系,也就是说,我可以在单个活动上有多个片段。我觉得这是明智的,更容易理解。当我想将包含2个片段的现有活动转换为在另一个可能包含多个片段的活动之间滑动时,就会出现问题。我正在考虑片段中的片段,但我对这种方法感到不舒服。我想知道是否有一种方法可以在Android上实现这一点

第二件事是,所有教程都指向一个片段,其中包含用于查看数据的占位符。以这种方式很容易实现。但我并不是通过某种数据源进行分页,而是通过活动进行分页。我需要两个活动之间的可靠通信,以便ActivityB向ActivityA发送数据。虽然我没有执行很多活动,但只执行了两个活动。我目前正在实现文档中描述的代码,但这似乎不是我想要的。我看到一些应用程序做了类似的事情,我也想有类似的功能。有什么想法吗


谢谢。

我现在有了解决办法。我所做的是创建了一个片段,它将添加2个子片段。这两个子片段有一个列表和一个过滤器片段。我不是通过活动来做,而是通过片段来做。如果有人遇到类似问题:

下面是父片段的样子:

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。最初,我只是简单地重用了活动的布局文件,并将片段膨胀到各自的位置:

<?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>

我希望这会对某人有所帮助。

我不确定是否了解您的问题所在。但是,当您有目的地从一个活动切换到另一个活动时,您可以发送数据。示例来自:public void sendMessageView视图{Intent Intent Intent=new Intent this,DisplayMessageActivity.class;EditText EditText=EditText findViewByIdR.id.edit_message;String message=EditText.getText.toString;Intent.putExtra_message,message;StartActivityContent;}没错,我们可以这样做,但这是关于在视图之间滑动。我想在第1页显示一个视频播放器,其中包含两个片段:Fragment1>标题栏和Fragment2>视频。在第2页,我可以显示一些可用视频的列表。问题是我已经有了一个代码,它现在相当强大。我有一些片段通过它们的底层活动与其他片段通信。