【问题标题】:ViewPager do not generate UI once the phone's back button is pressed按下手机的后退按钮后,ViewPager 不会生成 UI
【发布时间】:2014-01-15 07:44:38
【问题描述】:

这是我的代码:

Home.java

import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Home extends Fragment {

    private TextView textView23;
    private ImageView addNewSalesInquery;
    private LinearLayout addNewSalesButton;
    private View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        view = inflater.inflate(R.layout.activity_home,container,false);

        //Intializing instance variables
        //addNewSalesInquery = (ImageView)findViewById(R.id.add_new_sales_inq);
        //textView23 = (TextView)findViewById(R.id.textView23);
        //textView23.setSelected(true);
         addNewSalesButton = (LinearLayout)view.findViewById(R.id.add_new_sales_btn);

        //Registering Listeners
        //addNewSalesInquery.setOnClickListener(new AddNewSalesInqury());
         addNewSalesButton.setOnClickListener(new AddNewSalesInqury());
        return view;

    }



    //Event Handler for Add New Sales
    private class AddNewSalesInqury implements OnClickListener
    { 

        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub

            FragmentTransaction ft = getFragmentManager().beginTransaction();

            ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
            ft.replace(R.id.fragment_container, new ViewPagerManager(), "fragment").addToBackStack("fragment");
            // Start the animated transition.
            ft.commit();


        }

    }

}

ViewPagerManager.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class ViewPagerManager extends Fragment {

    private ImageView addNewSalesInqury;
    private RelativeLayout salesInquryMainLayout;
    private TableRow testEditSales; 
    private View view;

     private static final int ITEMS = 2;
        private static ViewPager viewPager;
        private MyAdapter pageAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        view = inflater.inflate(R.layout.activity_leads_and_sales_handling,container,false);
        intialize();
        return view;




    }

    private void intialize()
    {
        viewPager = (ViewPager)view.findViewById(R.id.pager);
        pageAdapter = new MyAdapter(getFragmentManager());
        viewPager.setAdapter(pageAdapter);
    }



    private  class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

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

        @Override
        public Fragment getItem(int position) {
            if(position==0)
            {
                return new SalesInqury();
            }
            else
            {
                return new NewLead();
            }
        }
    }

    public static void setCurrentItem (int item, boolean smoothScroll) {
        viewPager.setCurrentItem(item, smoothScroll);
    }

    //This method will handle menu clicks
        public static void onMenuItemClicked(View view) {
            if(view.getId()==R.id.menu_add_inquiry)
            {
                setCurrentItem(2,true);
            }
        }

}

activity_leads_and_sales_handling.xml

<RelativeLayout 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"
    tools:context=".LeadsAndSalesHandlingActivity"
    android:id="@+id/leadsAndSalesHandlingActivity" >

     <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
       </android.support.v4.view.ViewPager>

</RelativeLayout>

我使用它从Home 导航到ViewPagerManager。在ViewPagerManager,如果我点击返回按钮,我可以回到Home。现在,如果我尝试通过单击应用程序上的虚拟按钮导航回ViewPagerManager,会发生什么只是导航到 100% 空白的白色屏幕!这里有什么问题?

更新

我想我找到了问题所在。在 activity_leads_and_sales_handling.xml 中有一个ViewPager,它应该显示的是ViewPager 中的第一个Fragment。单击后退按钮时,我认为此ViewPager 由于某种原因停止工作或停止显示 UI。

【问题讨论】:

  • 请编辑你的问题:) .....在Fragment2中,如果我点击后退按钮,我可以回到Fragment2
  • @TarekKanon:我做到了。谢谢

标签: java android android-fragments android-viewpager android-nested-fragment


【解决方案1】:

我也遇到了同样的问题,通过使用 getChildFragmentManager() 而不是 getFragmentManager() 解决了>

getChildFragmentManager()返回一个私有的 FragmentManager 用于在这个 Fragment 中放置和管理 Fragment

【讨论】:

    【解决方案2】:

    我有同样的问题。覆盖 onResume() 并重新初始化您的 UI。

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initialize();
    }
    
    private void initialize(){
        btnOne= (Button) getActivity().findViewById(R.id.btnOne);
        btnTwo = (Button) getActivity().findViewById(R.id.btnTwo);      
    
        btnOne.setOnClickListener(this);
        btnTwo.setOnClickListener(this);    
    
        viewPager = (ViewPager) getActivity().findViewById(R.id.viewPager);
        viewPager.setAdapter(new ViewPagerAdapter(getActivity().getSupportFragmentManager()));  
    
    }
    @Override
    public void onResume() {
        super.onResume();
        initialize();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多