Android的碎片有标签和Viewpager碎片、标签、Android、Viewpager

2023-09-03 23:20:50 作者:天真是姐的过去式名词

我们正在建立一个应用程序如上图已嵌套片段。

标签拥有 - 详细信息选项卡和地图标签 详细信息选项卡将有一个幻灯片 - 就像查看页面滑块和信息低于这将是滚动 地图选项卡,将显示该地图。

我已implmented的选项卡和如上面所看到的映射以及所述滑块。现在我很困惑,我怎么可以添加滑块下方的内容,这将使详细信息选项卡滚动。

我曾尝试?

在单击详细信息选项卡中的片段会尽量抬高它里面的两个碎片布局。

AndroidTabLayoutActivity.java

 包com.mink7.abs;

进口com.viewpagerindicator.CirclePageIndicator;

进口android.app.TabActivity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.support.v4.view.ViewPager;
进口android.widget.TabHost;
进口android.widget.TabHost.TabSpec;
导入了java.util.Random;
进口android.support.v4.app.FragmentTabHost;
进口com.viewpagerindicator.PageIndicator;

进口android.support.v4.app.FragmentActivity;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.widget.Toast;

公共类AndroidTabLayoutActivity扩展TabActivity {
        / **第一次创建活动时调用。 * /
        @覆盖
        公共无效的onCreate(包savedInstanceState){
                super.onCreate(savedInstanceState);

                // FragmentTabHost tabHost;

                的setContentView(R.layout.main);
                // tabHost =(FragmentTabHost)findViewById(R.id.tabMode);

                TabHost tabHost = getTabHost();

                / *
                 * mAdapter =新TestFragmentAdapter(getSupportFragmentManager());
                 *
                 * mPager =(ViewPager)findViewById(R.id.pager);
                 * mPager.setAdapter(mAdapter);
                 *
                 * mIndicator =(CirclePageIndicator)findViewById(R.id.indicator);
                 * mIndicator.setViewPager(mPager);
                 * /

                //标签的照片
                则tabspec photospec = tabHost.newTabSpec(细则);
                photospec.setIndicator(详细信息,
                                。getResources()getDrawable(R.drawable.icon_photos_tab));
                意图photosIntent =新的意图(这一点,DetailsActivity.class);
                photospec.setContent(photosIntent);

                //标签的歌曲
                则tabspec songspec = tabHost.newTabSpec(地图);
                //设置标题和图标标签
                songspec.setIndicator(地图,
                                。getResources()getDrawable(R.drawable.icon_songs_tab));
                意图songsIntent =新的意图(这一点,MapsActivity.class);
                songspec.setContent(songsIntent);

                //标签的影片
                / *
                 *则tabspec videospec = tabHost.newTabSpec(视频);
                 * videospec.setIndicator(视频,
                 * getResources()getDrawable(R.drawable.icon_videos_tab))。意图
                 * videosIntent =新的意图(这一点,VideosActivity.class);
                 * videospec.setContent(videosIntent);
                 * /

                //将所有则tabspec到TabHost
                tabHost.addTab(photospec); //将照片添加标签
                tabHost.addTab(songspec); //将歌曲添加标签
                // tabHost.addTab(videospec); //将视频添加标签
        }

}
 
Android 4 Fragment,ViewPager

DetailsActivity.java

 包com.mink7.abs;

进口android.os.Bundle;
进口android.support.v4.view.ViewPager;
进口com.viewpagerindicator.CirclePageIndicator;

公共类DetailsActivity扩展BaseSampleActivity {
    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.place_details_layout);

        mAdapter =新TestFragmentAdapter(getSupportFragmentManager());

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

        mIndicator =(CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}
 

BaseSampleActivity.java

 包com.mink7.abs;

导入了java.util.Random;

进口com.viewpagerindicator.PageIndicator;

进口android.support.v4.app.FragmentActivity;
进口android.support.v4.view.ViewPager;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.widget.Toast;

公共抽象类BaseSampleActivity扩展FragmentActivity {
    私有静态最后随机RANDOM =新的随机();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    // FragmentTabHost mTab​​Host;


    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单)
    {
        。getMenuInflater()膨胀(R.menu.main,菜单);
        返回true;
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        开关(item.getItemId()){
            案例R.id.random:
                最终诠释页= RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(这一点,更改到页面+页,Toast.LENGTH_SHORT);
                mPager.setCurrentItem(页);
                返回true;

            案例R.id.add_page:
                如果(mAdapter.getCount()小于10){
                    mAdapter.setCount(mAdapter.getCount()+ 1);
                    mIndicator.notifyDataSetChanged();
                }
                返回true;

            案例R.id.remove_page:
                如果(mAdapter.getCount()→1){
                    mAdapter.setCount(mAdapter.getCount() -  1);
                    mIndicator.notifyDataSetChanged();
                }
                返回true;
        }
        返回super.onOptionsItemSelected(项目);
    }
}
 

解决方案

注意碎片由于Android 4.2或最新的兼容库支持嵌套。 previously它根本不支持。至于下面的内容 - 只是把他们这一切在一个多个容器

We are building an App as shown above that has nesting of Fragments.

Tabs Featuring - Details Tab and MAps Tab Details Tab will have a slideshow - like the View Page Slider and information below that which will be scrollable. Maps Tab which will display the maps.

I have implmented the tabs and maps as well as the Slider as seen above. Now i am confused how i can add content below the Slider which will make the Details Tab scrollable.

What i have tried ?

On CLicking the Details tab the Fragment will try to inflate two Fragment layouts inside it.

AndroidTabLayoutActivity.java

package com.mink7.abs;

import com.viewpagerindicator.CirclePageIndicator;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import java.util.Random;
import android.support.v4.app.FragmentTabHost;
import com.viewpagerindicator.PageIndicator;

import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class AndroidTabLayoutActivity extends TabActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                // FragmentTabHost tabHost;

                setContentView(R.layout.main);
                // tabHost = (FragmentTabHost) findViewById(R.id.tabMode);

                TabHost tabHost = getTabHost();

                /*
                 * mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
                 *
                 * mPager = (ViewPager) findViewById(R.id.pager);
                 * mPager.setAdapter(mAdapter);
                 *
                 * mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
                 * mIndicator.setViewPager(mPager);
                 */

                // Tab for Photos
                TabSpec photospec = tabHost.newTabSpec("Details");
                photospec.setIndicator("Details",
                                getResources().getDrawable(R.drawable.icon_photos_tab));
                Intent photosIntent = new Intent(this, DetailsActivity.class);
                photospec.setContent(photosIntent);

                // Tab for Songs
                TabSpec songspec = tabHost.newTabSpec("Maps");
                // setting Title and Icon for the Tab
                songspec.setIndicator("Maps",
                                getResources().getDrawable(R.drawable.icon_songs_tab));
                Intent songsIntent = new Intent(this, MapsActivity.class);
                songspec.setContent(songsIntent);

                // Tab for Videos
                /*
                 * TabSpec videospec = tabHost.newTabSpec("Videos");
                 * videospec.setIndicator("Videos",
                 * getResources().getDrawable(R.drawable.icon_videos_tab)); Intent
                 * videosIntent = new Intent(this, VideosActivity.class);
                 * videospec.setContent(videosIntent);
                 */

                // Adding all TabSpec to TabHost
                tabHost.addTab(photospec); // Adding photos tab
                tabHost.addTab(songspec); // Adding songs tab
                // tabHost.addTab(videospec); // Adding videos tab
        }

}

DetailsActivity.java

package com.mink7.abs;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import com.viewpagerindicator.CirclePageIndicator;

public class DetailsActivity extends BaseSampleActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_details_layout);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

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

        mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}

BaseSampleActivity.java

package com.mink7.abs;

import java.util.Random;

import com.viewpagerindicator.PageIndicator;

import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public abstract class BaseSampleActivity extends FragmentActivity {
    private static final Random RANDOM = new Random();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    //FragmentTabHost mTabHost;


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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.random:
                final int page = RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(this, "Changing to page " + page, Toast.LENGTH_SHORT);
                mPager.setCurrentItem(page);
                return true;

            case R.id.add_page:
                if (mAdapter.getCount() < 10) {
                    mAdapter.setCount(mAdapter.getCount() + 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;

            case R.id.remove_page:
                if (mAdapter.getCount() > 1) {
                    mAdapter.setCount(mAdapter.getCount() - 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

解决方案

Be aware Fragments nesting is supported since Android 4.2 or latest compatibility libraries. Previously it was simply not supported. As for content below - just put them it all in one more container