0

ビューページャーのようにそれらの間をスワイプできるように、解決策、2つの異なるアクティビティを実装する方法について考えています。

私はEclipseで2つのプロジェクトを作成しました。それらの1つで、mp3.fileのカバーを表示する単純なmusicplayerを実装しました。曲を再生するときのシークバーの動きも表示されます。他のプロジェクトでは、地図上に自分の場所を表示するopenstreetmapアクティビティを実装しました。私が欲しいのは、この2つのアクティビティを組み合わせて、それらの間をスワイプできるようにすることです。それは可能ですか?それを解決するためにどのようにアプローチする必要がありますか?フラグメントの使用に関して他の解決策を提供しますか?事前にアドバイスをいただければ幸いです。英語をお許しください:)

編集:より良い理解のために:

曲を再生し、カバー、曲名、通訳、および曲の再生中に移動するシークバーを表示するプロジェクトがあります。それはまだ正常に動作しています。私が欲しいのは、このように1つのレイアウトを2つのレイアウトに分割すること です。写真では、私が実装したプレーヤーを見ることができます(左側)。同じレイアウトコンポーネントを分割したいので、最後(右側)に2つのレイアウトがあります。フラグメントを使用して試しました。これが私の現在のコードです:

public class MainActivity extends FragmentActivity {

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(com.example.swipeview3.R.layout.main);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(com.example.swipeview3.R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(com.example.swipeview3.R.menu.main, menu);
    return true;
}

//  ------------------------------#########################------------------------------
//  ------------------------------#########################------------------------------

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        if(position == 0) {
            PlayerFragment f = new PlayerFragment(position);
            return f;
        }
        if(position == 1) {
            SongParameterFragment f = new SongParameterFragment(position);
            return f;
        }
        else {
            Fragment fragment = new DummySectionFragment();
            Bundle args = new Bundle();
            args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
            fragment.setArguments(args);
            return fragment;
        }
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return getString(com.example.swipeview3.R.string.title_section1).toUpperCase();
        case 1:
            return getString(com.example.swipeview3.R.string.title_section2).toUpperCase();
        case 2:
            return getString(com.example.swipeview3.R.string.title_section3).toUpperCase();
        }
        return null;
    }
}

//  ------------------------------#########################------------------------------
//  ------------------------------#########################------------------------------

public static class DummySectionFragment extends Fragment {

    public static final String ARG_SECTION_NUMBER = "section_number";

    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Create a new TextView and set its text to the fragment's section
        // number argument value.
        TextView textView = new TextView(getActivity());
        textView.setGravity(Gravity.CENTER);
        textView.setText(Integer.toString(getArguments().getInt(
                ARG_SECTION_NUMBER)));
        return textView;
    }
}

//  ------------------------------#########################------------------------------
//  ------------------------------#########################------------------------------

public static class PlayerFragment extends Fragment {

    int fragmentNR;
    Button btnPlay, btnStop, btnExit;
    SeekBar seekBar;

    public PlayerFragment(int position) {
        this.fragmentNR = position;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        btnPlay = (Button)getView().findViewById(com.example.swipeview3.R.id.button_play);
        btnStop = (Button)getView().findViewById(com.example.swipeview3.R.id.button_stop);
        btnExit = (Button)getView().findViewById(com.example.swipeview3.R.id.button_exit);

        return inflater.inflate(com.example.swipeview3.R.layout.player, container, false);
    }



}

//  ------------------------------#########################------------------------------
//  ------------------------------#########################------------------------------

public static class SongParameterFragment extends Fragment {

    int fragmentNR;
    ImageView cover;
    TextView songParameter, songDuration;

    public SongParameterFragment(int position) {
        this.fragmentNR = position;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        return inflater.inflate(com.example.swipeview3.R.layout.song_parameters, container, false);
    }
}
}

PlayerFragmentでボタンIDを割り当てると、nullpointerExceptionになりました

01-23 13:33:09.553: D/AndroidRuntime(15881): Shutting down VM
01-23 13:33:09.553: W/dalvikvm(15881): threadid=1: thread exiting with uncaught exception (group=0x40c571f8)
01-23 13:33:09.553: E/AndroidRuntime(15881): FATAL EXCEPTION: main
01-23 13:33:09.553: E/AndroidRuntime(15881): java.lang.NullPointerException
01-23 13:33:09.553: E/AndroidRuntime(15881):    at com.example.swipeview3.MainActivity$PlayerFragment.onCreateView(MainActivity.java:142)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.View.measure(View.java:12929)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.View.measure(View.java:12929)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.View.measure(View.java:12929)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2257)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.View.measure(View.java:12929)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.os.Looper.loop(Looper.java:137)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at android.app.ActivityThread.main(ActivityThread.java:4511)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at java.lang.reflect.Method.invokeNative(Native Method)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at java.lang.reflect.Method.invoke(Method.java:511)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
01-23 13:33:09.553: E/AndroidRuntime(15881):    at dalvik.system.NativeStart.main(Native Method)

それがまさに私の問題です。どこに割り当てるのか、どこに関数を書くのかわかりません。sry guys、しかし私はそれがフラグメントでどのように機能するかを本当に理解していません。うまくいけば、あなたは理解していて、私を助けることができます:/どうもありがとう

4

3 に答える 3

0

ジェスチャを検出するためにアクティビティにgestureOverlayを配置し、スクロールして、最初のアクティビティの終了/移動と2番目のアクティビティの開始/移動をアニメーション化できます。

于 2013-01-22T11:37:53.420 に答える
0

この例を見てください

public class MainActivity extends FragmentActivity 
{
    private ViewPager mPager;
    private FragAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mPager = (ViewPager) findViewById(R.id.pager);
        mAdapter = new FragAdapter(getSupportFragmentManager());        
        mPager.setAdapter(mAdapter);     

        mPager.setOnPageChangeListener(new OnPageChangeListener() 
        {
            public void onPageSelected(int position) 
            {
            }

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
            {

            }

            public void onPageScrollStateChanged(int state) 
            {
                if (state == ViewPager.SCROLL_STATE_DRAGGING)
                {

                }
                if (state == ViewPager.SCROLL_STATE_IDLE)
                {

                }
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public class FragAdapter extends FragmentPagerAdapter 
    {
        private Map<Integer, Object> mPageReferenceMap = new HashMap<Integer, Object>();
        public FragAdapter(FragmentManager fm) 
        {
            super(fm);
        }

        @Override
        public int getCount() 
        {
            return 3;
        }

        @Override
        public Fragment getItem(int position) 
        {
          Fragment frag;
          if (position == 0)
          {
              frag = new FirstActivity();  
          }   
          else if (position == 3)
          {
              frag =  new SecondActivity();
          }
          else if (position == 6)
          {
              frag =  new ThirdActivity();
          }

          mPageReferenceMap.put(Integer.valueOf(position),frag);
          return frag;
        }


        @SuppressWarnings("deprecation")
        @Override
        public void destroyItem(View container, int position, Object object) {

            super.destroyItem(container, position, object);

            mPageReferenceMap.remove(Integer.valueOf(position));
        }

        public Object getFragment(int key) {

            return mPageReferenceMap.get(key);
        }
    }

}

次に、新しいFirstActivity.javaを作成します

public class FirstActivity extends Fragment 
{
    public RadioGroup rythm;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
       super.onCreate(savedInstanceState);
       Log.e("Test", "hello");
       //position = getArguments().getInt("position");

    }

 /**
  * Handle the results from the voice recognition activity.
  */     
    @Override
    public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
       View view = inflater.inflate(R.layout.rythm, container, false);
       TextView text = (TextView) view.findViewById(R.id.textView);
       text.setText("Select Rythm");

       rythm = (RadioGroup) view.findViewById(R.id.rythm);
       RadioButton first = (RadioButton) rythm.getChildAt(0); 
       first.setText("Sinus");

       RadioButton second = (RadioButton) rythm.getChildAt(1); 
       second.setText("Afib");
       RadioButton third = (RadioButton) rythm.getChildAt(1); 
       third.setText("Other");

       return view;
    }
}
于 2013-01-22T18:42:04.583 に答える
0

framelayoutレイアウトファイルにaだけを含むFragmentアクティビティを使用します。2つのアクティビティのUIを2つの別々のフラグメントに実装します(フラグメントはアクティビティのすべてのライフサイクルメソッドを実装することを思い出してください)。

A Fragment represents a behavior or a portion of user interface in an Activity.

フラグメントの詳細。

最初に、ユーザーからゲスト入力を受け取ったら、クラスを使用してフレームレイアウトにフラグメントを追加し、フラグメントをFragmentManager2番目のフレームに置き換えます。

フラグメントを使用すると、UI要素を非常に簡単に再利用できます(両方のアクティビティのUIを単一の画面に配置するタブレットをサポートするようにアプリケーションを拡張する場合を想定してください)。

于 2013-01-23T09:25:06.737 に答える