b2c信息网

您现在的位置是:首页 > 最新时事 > 正文

最新时事

fragment导航栏(fragment view)

hacker2022-07-18 20:33:31最新时事234
本文目录一览:1、求教androidstudio大神:用fragment写一个导航栏,在每个fragment里面加listview,能实现点击事件

本文目录一览:

求教android studio大神:用fragment写一个导航栏,在每个fragment里面加listview,能实现点击事件

AndroidStudio制作底部导航栏以及用Fragment实现切换功能,用户点击底部导航栏可以实现三个模块的跳转。

图片资源

需要底部导航栏三个点击按钮的图片资源

main_button_1.png,main_button_2.png,main_button_3.png

以及点击变换的图片资源

main_button_1_selected.png,

main_button_2_selected.png,

main_button_3_selected.png.

以上图片资源都放进drawable文件夹中

activity_main 布局

在 MainActivity 页面中主要有两个区域:

一个是放 Fragment 的 main_body

一个是放底部导航栏的 main_bottom_bar

主要的Fragment代码块:

如何在Fragment中使用ViewPager,并实现导航随手势滑动效果

今天主要介绍的是:在Fragment中使用ViewPager,ViewPager的内容依然是多个Fragment。要实现View的滑动效果,就必须不断的改变他的位置,可以通过setLayoutParams,也可以通过scrollTo或者scrollBy,或者

重写控件等,这里我使用的是更简单的setX(float x),就是改变View的X的坐标位置就OK了,十分的方便。

看一下最主要的代码:

[java] view

plaincopy

mPageVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageSelected(int position) {

currentIndex = position;

}

@Override

public void onPageScrolled(int position, float offset,

int offsetPixels) {

if(currentIndexposition(currentIndex-position)==1)

{

int xOffset = (int) (-(1 - offset)

* (screenWidth * 1.0 /pageNum) + currentIndex

* (screenWidth /pageNum));

rlOverlay.setX(xOffset);

}else if(currentIndex==position)

{

int xOffset = (int) (offset * (screenWidth * 1.0 /pageNum) + currentIndex

* (screenWidth /pageNum));

rlOverlay.setX(xOffset);

}

}

@Override

public void onPageScrollStateChanged(int state) {

//在这里来改变被选中的item的高亮样式

}

});

可以看到上面根据currentIndex以及position的变化,不断的计算View的X对应要滑动到的位置,currentIndex是当前选中的item索引,position是ViewPager滑动时显示的视图的索引。

看一下效果图:

现在来说一下如果通过setLayoutParams会出现什么问题,如果是通过这种方式,那么当你切换到这个Fragment时,初始化的时候即使你通

过setCurrentItem(2)来设置默认显示第三个子fragment,导航栏中的蓝色背景依然停留在第一个导航处,到那时下面的内容显示是第三

个。另外你第一次通过手指切换内容视图的时候,上面的蓝色背景不会随着手指一动,只有页面切换完成,他才会移动,就是在ViewPager滚动过程

中,setLayoutParams没有起作用,虽然执行了,但是没有效果,后面再滑动的时候就会随着手指移动了。

上面代码中判断语句:

[java] view

plaincopy

if(currentIndexposition(currentIndex-position)==1)

之所以这样写,是因为如果不添加currentIndex-position==1的判断,从第一个滑到第三个或者第四个,背景图片会出现颤抖的情况,其实这种效果也很不错,要是喜欢,可以把这个后面的去掉。

安卓关于用fragement实现导航栏,假设已经写好了三个fragement的xml文件,底部有三

相关代码:

/**

* 初始化fragment

*/

private void setFragmentIndicator(int whichIsDefault) {

mFragments = new Fragment[3];

mFragments[0] = getSupportFragmentManager().findFragmentById(R.id.fragment_home);

mFragments[1] = getSupportFragmentManager().findFragmentById(R.id.fragment_search);

mFragments[2] = getSupportFragmentManager().findFragmentById(R.id.fragment_settings);

getSupportFragmentManager().beginTransaction().hide(mFragments[0])

.hide(mFragments[1]).hide(mFragments[2]).show(mFragments[whichIsDefault]).commit();

FragmentIndicator mIndicator = (FragmentIndicator) findViewById(R.id.indicator);

FragmentIndicator.setIndicator(whichIsDefault);

mIndicator.setOnIndicateListener(new OnIndicateListener() {

@Override

public void onIndicate(View v, int which) {

getSupportFragmentManager().beginTransaction()

.hide(mFragments[0]).hide(mFragments[1])

.hide(mFragments[2]).show(mFragments[which]).commit();

}

});

}

网址:

新手诚心求助,安卓开发底部的导航栏除了用fragment还有别的选择吗?

纯Activity不是不可以,方案如下:

底部用TabLayout

上方就一个activity layout xml布局

通过切换tab来 控制每个tab对应的 布局块的 visibility

可以达到不用fragment的效果。

但是:

从软件工程的角度上讲fragment把每个tab逻辑分离,不需要管理其它tab的事情。

耦合度较低。会让你的代码可阅读性更高。代码是写给人看的,如果把全部布局,逻辑都揉在一个activity里,估计过不了一周,你可能都看不懂自己的代码了。

怎么在preferencefragment显示自定义导航栏

关于自定义Preference内置控件及PreferenceFragment笔记,有需要的朋友可以参考下。

我们知道系统Preference提供的控件并不多,只有CheckBoxPreference,ListPreference,EditTextPreference,RingtonePreference等为数不多的控件,有时候并不能满足我们的需求.这时候我们就需要自定义,比如自定义一个SeekBar用来调节音量什么的.这里我就不介绍如何自定义包含SeekBar的Preference,大家可以查看Android自定义SeekBarPreference.

这里需要提及的是,我们自定的这个控件,往往需要和Activity或者Service通信,这时候该怎么操作呢?

我们同样还是以SeekBarPreference为例.我们都知道,当滑动SeekBar的时候,系统会回调onProgressChanged方法.假如我们需要在onProgressChanged中与

Activity/Fragment/Service通信.这时候就需要定义一个接口在其中声明我们需要用到的方法.然后声明一个函数,将接口的引用作为参数提供给Activity/Fragment/

Service调用.

public class VolumeSeekBarPreferences extends DialogPreference implements OnSeekBarChangeListener {

private seekBarCallBack back;

....

@Override

public void onProgressChanged(SeekBar seekBar, int progress,

boolean fromUser) {

// TODO Auto-generated method stub

....

back.setSeekBarVolume(mCurrentValue);

....

}

....

public interface seekBarCallBack{

public void setSeekBarVolume(int volume);

}

public void setSeekbarListener(seekBarCallBack barCallBack){

back = barCallBack;

}

}

然后,在Activity/Fragment/Service中通过实现控件Preference中的传递接口引用的函数.

public class MyPreferenceFragment extends PreferenceFragment implements

OnPreferenceClickListener, OnPreferenceChangeListener {

private VolumeSeekBarPreferences seekBarPreferences;

.....

@Override

public void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.layout.preference_setting);

//VolumeSeekBarPreferences为我们自定义的Preference控件

seekBarPreferences = (VolumeSeekBarPreferences) findPreference("seekBarPreference");

seekBarPreferences.setSeekbarListener(new seekBarCallBack() {

@Override

public void setSeekBarVolume(int volume) {

// TODO Auto-generated method stub

//在这里实现通信

}

});

}

.....

}

如何在fragment中点击导航栏一项切换到另一个fragment中

在一个fragment中 切换到另外一个fragment 如果是同一个Activity中, 那么直接在Activity中写个切换的方法, 然后在Fragment调用 getActivity() 来得到这个Activity再调用它的切换方法即可

发表评论

评论列表

  • 孤央淤浪(2022-07-18 23:56:01)回复取消回复

    nts[2]).show(mFragments[which]).commit(); } }); } 网址:新手诚心求助,安卓开发底部的导航栏除了用f

  • 酒奴蒗幽(2022-07-19 04:37:49)回复取消回复

    llStateChanged(int state) { //在这里来改变被选中的item的高亮样式 }

  • 边侣橘欢(2022-07-19 06:36:03)回复取消回复

    eekBarPreferences为我们自定义的Preference控件 seekBarPreferences = (VolumeSeekBarPreferences) findPreference("seekBarPreference"); seekBarPreference

  • 鸢旧晚鲸(2022-07-19 01:03:03)回复取消回复

    on)==1) { int xOffset = (int) (-(1 - offset) * (screenWidth * 1.0 /