相关疑难解决方法(0)

Android Handle Fragment如何在ViewPager中实现生命周期?

这不是一个简单的问题.我会尽我所能地解释自己,所以这可能有点长.

说明

最近,我和Fragments以及ViewPager一直在争吵.

我发现的是,ViewPager可以保存尽可能多的片段.当它第一次被实例化时,取决于类型(FragmentStatePagerAdapterFragmentPagerAdapter FragmentPagerAdapter和FragmentStatePagerAdapter之间的差异),它将创建所有片段或仅创建"所需片段".

在这些片段中,您可以自由地使用类似于getActivity()创建视图,查找视图,显示对话框的上下文等方法...

但是,一旦离开片段,getActivity()开始返回null,因为片段是从Activity中释放出来的.听起来很合理.

但是,对我来说听起来不合逻辑,因此我在这里要求的是,当你回到片段页面(或足够接近)时,它会再次触发基本方法,比如onAttach.

onAttach您可以尽快保留Activity提供的上下文,但是如果您尝试执行以下操作(伪代码):

class MyFragment extends Fragment
{
    private Context context;

    private doThingsAfterAttach()
    {
        getActivity(); //this is null.

        null != context; //TRUE
    }

    @Override
    public onAttach( Activity activity )
    {
        context = activity;
        doThingsAfterAttach();
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以看到的是getActivity(),即使您在onAttach触发后调用此方法,也会返回null .

如果您决定将保留的上下文强制转换为Activity,要执行findViewById任务,您将看到您尝试查找的视图为null,这意味着无法找到/不存在.

问题

想象一下,你有一个带有5个标签(片段)的ViewPager.当在这5个选项卡中的任何一个上执行任务时,您希望通知"持有者"活动,以便通知所有应更新其内容的片段,因为某些内容已更改.但是当你通知他们时,如果他们必须改变布局,他们就不能这样做,因为一旦你尝试findViewById,就会发生两件事:getActivity()返回null,因此你无法获得视图,如果你转换上下文对于活动,当您搜索任何视图时,它不会返回任何视图.

让我最害怕的是,当你旋转设备时,就像离开片段页面然后回去一样; "失去"活动.

真正的问题

所以我正在寻找的是一个答案,它解释了我内部发生了什么,所以我可以找到适当的代码来处理这些情况.

我可以提供的代码不多,因为它没用.谁使用ViewPager Fragments,可能是处理这些事情,所以你会理解我.

谢谢,在这里我准备回答你的问题.

谢谢.

android android-fragments

5
推荐指数
2
解决办法
1670
查看次数

ViewPager从另一个片段返回后具有空白页面的片段

在我的应用程序中,我试图用ViewPagers 创建2个片段.这些片段有3个标签/页面,每个标签都带有RecyclerViews,它们应该由数据库支持,所以我将它们保存在一个List.

class MainActivity : AppCompatActivity() {    
    val fragments = listOf(SwipeFragment(), SwipeFragment())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[0]).commit()
        button1.setOnClickListener { 
            supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[0]).commit()
        }
        button2.setOnClickListener {
            supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[1]).commit()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,在远离SwipeFragment和返回之后,视图似乎是空的.然后,如果你导航到例如最左边的页面,最右边的一个"出现"(当你去它时).这导致中间页面保持空白.(它是说,之所以FragmentStatePagerAdapter在默认情况下只能保存当前页面和2点相邻的中间一个不与3个标签得到刷新的布局-我试了一下还与5个标签页,我能够把所有的他们来回走动).

经过一些调试后,我看到代表页面的片段没有被删除FragmentManager,但主要SwipeFragment是.FragmentManager即使在阅读了几乎所有的源代码之后,我也无法理解它是如何工作的.

如果我能以某种方式安全地从中删除碎片FragmentManager,它可能会起作用.
我已经尝试了一些保存状态的技术,但框架会自动执行(实际上可能是导致此问题的原因).
我只是Android的初学者,所以无论如何都可能有更好的方法.我将把剩下的文件留在这里作为参考.


activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.test.MainActivity">

    <FrameLayout
        android:id="@+id/placeholder"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button1"
            style="?android:buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager kotlin fragmentmanager

3
推荐指数
1
解决办法
715
查看次数

如何使用Tablayout清除Viewpager的缓存内存

我刚开始使用Material Design的ViewPager和Tablayout(随Android Studio一起提供).我创建了5个片段,我可以根据需要使用它们进行滑动.

根据Fragment2中的用户选择,我想删除Fragment3.但是,从tablayout中删除Tab后,当滑动到第3个选项卡(在删除第3个选项卡之前是第4个选项卡)时,会显示错误的片段 - 系统在内存中显示第3个片段并显示它.如果我销毁那个片段,那么我会得到一个关于"不能改变片段标签"的例外.

如何告诉系统第3个片段不被使用,或者在我需要它之前将其从内存中删除然后将其重新加载到内存中.

java android android-fragments android-viewpager android-studio

2
推荐指数
1
解决办法
5555
查看次数

从另一个抽屉式窗口导航回来时,选项卡布局数据会消失

我有一个导航抽屉和一个抽屉物品.Home是一个带有3个标签View Pager.当我第一次打开View Pager选项卡时,一切正常,但是当我导航到其中一个Drawer 片段(比如个人资料)后导航回到它时,它是空的(所有三个选项卡)

 import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.preference.PreferenceActivity;
    import android.support.design.widget.NavigationView;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.FrameLayout;
    import android.widget.TextView;

    import com.android.volley.toolbox.ImageLoader;
    import com.android.volley.toolbox.NetworkImageView;
    import com.example.amol.ecom.login.SessionManager;

    import de.hdodenhof.circleimageview.CircleImageView;

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

        DrawerLayout drawer;
        FrameLayout frameLayout;
        NavigationView navigationView;
        ActionBarDrawerToggle toogle;
        Fragment fragment;
        NetworkImageView networkImageView;
        public TextView nametextview, emailtextview;


        @Override
        protected …
Run Code Online (Sandbox Code Playgroud)

eclipse android android-viewpager android-volley android-tablayout

2
推荐指数
1
解决办法
891
查看次数