Tag: android fragments

Android viewpager:添加/删除页面时的奇怪错误

我不知道如何解释这个,所以我在Youtube上传了一个video。 当我添加页面时,一切正常。 如果我从列表的末尾开始并逐步移动到第一页,也删除页面工作,但如果我删除0之间和之后的某处我添加页面,我得到一个空白页面。 片段已创建但视图不是。 我的代码有问题吗? 是的,我已经看到了这个问题,返回POSITION_NONE不是一个选项,因为应用程序我正在从web下载内容并将其显示在listview中,因此每次用户删除页面时重新创建片段都不是很有效。 Button click: Result: Add page [Fragment 1] Add page [Fragment 1][Fragment 2] Add page [Fragment 1][Fragment 2][Fragment 3] remove page(position2) [Fragment 1][Fragment 2] remove page(position1) [Fragment 1] Add page [Fragment 1][Fragment 2] remove page(position1) [Fragment 1] remove page(position0) —No pages— Add page [Fragment 0] Add page [Fragment 0][Fragment 1] […]

BottomNavigationView – 如何避免重新创建片段并重用它们

我想在我的项目中创建一个底部导航栏。 每个视图都有自己的片段。 问题是,每次我点击按钮更改视图,例如从最近更改为collections夹,它会创建具有全新状态的新片段(例如滚动位置,文本更改我的片段包含的任何内容)。 我知道在官方Android文档中有人写道底部导航栏应该重置任务状态,但我认为这对用户来说太不舒服了。 我希望有一些像instagram这样的function,你可以从feed更改为探索,然后返回到滚动位置,图像缓存一切都保存。 我几乎尝试了解决这个问题的方法,唯一有效的方法是根据情况设置可视性GONE和设置可见性VISIBLE但我明白这不是正确的方式应该有更好的方法这样做而我不是在谈论手动保存所需的实例。 我几乎每个关于底部导航片段的教程都会遵循,但有趣的是,没有人有兴趣在没有每次调用new的情况下使用它。 FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frameLayout, FirstFragment.newInstance()); fragmentTransaction.commit(); bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { Fragment fragment = null; switch (item.getItemId()) { case R.id.menu_dialer: fragment = FirstFragment.newInstance(); break; case R.id.menu_email: fragment = SecondFragment.newInstance(); break; case R.id.menu_map: fragment = ThirdFragment.newInstance(); break; } if […]

如何将选定的OnItemLongClick从一个ViewPager项拖到另一个

所以我有一个带有条形片段(ListFragment)和团队片段(ListFragment)的FragmentPagerAdapter。 当一个项目被长按时,我希望能够从团队选项卡中拖动它并将其放在栏标签上以建立关系。 这在理论上与主屏幕类似,如果我靠近边缘,我可以到达下一个屏幕。 更新: 我使用的是3.0+或兼容性库。 我试图拖动到另一个选项卡上,而不是在同一个选项卡中。

是否存在创建,更新和向Android中的片段或活动传递数据的约定?

我有这个活动( Foo )来托管这个Fragment( Bar ),它充满了来自另一个Activity的信息。 过程如下: MainActivity→Bundle→Foo→Bar→收集数据并返回MainActivity。 我应该将这些信息存储在onCreate的Foo活动的私有字段中,只是让Fragment使用它们吗? 我应该直接将Bundle作为参数传递给我的Bar Fragment吗? 我应该从收到的Bundle中创建一个新的Bundle并将新的Bundle传递给Fragment吗? 我是否应该在每次数据更改时完全替换整个片段,还是仅在用户不直接提供数据时更新视图,例如通过Dialog? 片段只有一个视图,其值可能会更改,但必须格式化此值(它是从Dialog接收的)。 我应该只在我的Activity的私有字段中存储该更改值,并在我必须更新视图或在完成时检索Activity的结果时访问它吗? 我应该在这样的视图上实现适配器,以便存储值,但是向用户显示格式化的信息吗? 我应该将格式化的值存储在视图中并将其解析回原始值,当我必须返回收集的数据时,我需要接收它所包含的信息吗? 我是否应该存储收集的所有信息,用以前收集的信息(使用第一部分中的方法之一)替换新片段? 是否存在涵盖将数据从一个活动传递到另一个活动的约定,以及如何在第二个活动的生命周期中使用数据? 或者至少是某种最佳做法 ? 编辑: 我知道如何做到以上所有要点,所以我不是要求代码; 问题是我发现如何将数据从主活动传递给子活动,如何将其传递给片段以及如何在数据更改的情况下更新片段之间缺乏同质性。

如何创建一个接口以从Fragment获取信息到Android活动?

在过去的几天里,我一直在拼命尝试用一个简单的片段构建一个Android应用程序(我使用了两次)。 我想将片段’EditText-boxes的内容传递给新活动。 我只是无法弄清楚如何从片段中获取这些内容。 到目前为止我所拥有的是: 我有我的edit_text_fragment.xml : 和相应的MyEditTextFragment.java : public class MyEditTextFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.edit_text_fragment, container, false); return view; } } 然后我在main.xml使用这个片段两次,如下所示: 在我的MainActivity中,我将按钮连接到一个新活动: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button submitButton = (Button) findViewById(R.id.submit_button); […]

如何从一个片段导航到另一个片段?

这是我的代码: activity_main.xml中 fragment_view1.xml custom_view.xml MainActivity.java package com.example.fragmenttest; import android.os.Bundle; import android.app.Activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View; import android.widget.Toast; public class MainActivity extends FragmentActivity { private ViewPager viewPager; private MyAdapter pageAdapter; private static final int ITEMS = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); […]

如何在android中将黑色透明放在图像上

我有一个图像,我想在底部添加黑色透明,以显示文本细节。 从服务器我将得到正常的图像,我想将其转换如下。 在下图中,您可以看到图像的底部是黑色透明的。

谷歌地图v2片段视图在更改宽度时会闪烁

我的应用包含Google maps v2 API片段视图。 点击按钮,我想改变它的宽度,从左到右依次为:谷歌地图拍摄半屏 – >谷歌地图全屏显示。 它有效,但在宽度过渡期间,我在屏幕右侧看到奇怪的黑色区域。 我已经读过这是谷歌的错误,他们发布了修复程序,但它只能在Android 4.1版本之后运行。 我使用的是Android 4.0 此外,我检查了另一个人提到的一些变通方法,但他们都专注于滚动等任务。没有人提到谷歌地图视图宽度变化。 有人可以帮帮我吗? 我的xml: 谷歌地图初始化: mapFragment = (SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map); map = mapFragment.getMap (); map.getUiSettings().setRotateGesturesEnabled(false); // disable rotation map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(54.6873439, 25.2770559) , 16.0f)); // set initial position map.getUiSettings().setZoomControlsEnabled(false); 在“展开”按钮单击,我正在扩展谷歌地图,如下所示: ResizeWidthAnimation anim = new ResizeWidthAnimation(mapFragment.getView (), width); anim.setDuration(400); mapFragment.getView ().startAnimation(anim); 动画类: public class ResizeWidthAnimation extends Animation { […]

使用PageTransformer在嵌套片段中使用ViewPager的dispatchDraw上的Nullpointerexception

我正在研究的Android应用程序中有一个非常不明显的bug。 我有一个片段,它依次包含一个由FragmentStatePagerAdapter支持的ViewPager。 寻呼机包含两个片段。 每当我尝试添加一个PageTransformer(使用Android开发者网站上的那些: http : //developer.android.com/training/animation/screen-slide.html ),一切正常,直到我试图离开片段包含viewpager(backpress或regular)。 我得到的错误如下。 我无法真正追踪导致它的原因x_x。 底部的寻呼机结构的代码片段。 Process: edu.utcs.android, PID: 11728 java.lang.NullPointerException at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2946) at android.view.View.draw(View.java:14476) at android.support.v4.view.ViewPager.draw(ViewPager.java:2171) at android.view.View.getDisplayList(View.java:13370) at android.view.View.getDisplayList(View.java:13412) at android.view.View.draw(View.java:14190) at android.view.ViewGroup.drawChild(ViewGroup.java:3103) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940) at android.view.View.draw(View.java:14476) at android.widget.FrameLayout.draw(FrameLayout.java:472) at android.view.View.getDisplayList(View.java:13370) at android.view.View.getDisplayList(View.java:13412) at android.view.View.draw(View.java:14190) at android.view.ViewGroup.drawChild(ViewGroup.java:3103) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940) at android.view.View.getDisplayList(View.java:13365) at android.view.View.getDisplayList(View.java:13412) at android.view.View.draw(View.java:14190) at android.view.ViewGroup.drawChild(ViewGroup.java:3103) at […]

在VIewPager(Android)中的两个片段之间传递数据(NullPointerException)

所以基本上我有2个片段 – FragmentConverter和FragmentFavourites ,我有一个MainActivity 。 我正在尝试使用名为Communicator的接口将第一个片段中的4个数组传递给第二个数组。 具体片段如下所示: public interface Communicator { public void respond(String[] names, String[] codes, String[] symbols, int[] images); } 这是FragmentFavourites一个方法: @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub String[] checkedNames = new String[counter]; String[] checkedCodes = new String[counter]; String[] checkedSymbols = new String[counter]; int[] checkedImages = new int[counter]; comm […]