简体   繁体   English

Android-使用viewPager更新其他片段中的textview

[英]Android - update textview in other fragment by using viewPager

i am trying to update a textview in fragment 3 from fragment it, but it returns me nullpointerexception. 我正在尝试从片段3更新片段3中的textview,但它返回我nullpointerexception。 But when i update fragment 2 (listview) from fragment 1 it works perfectly. 但是,当我从片段1更新片段2(列表视图)时,它可以正常工作。 I wondering what is the problem, can anyone please guide me? 我想知道是什么问题,有人可以指导我吗? Thanks. 谢谢。

my fragment 2 code where im trying to update my fragment 3: 我的片段2代码在我试图更新片段3的地方:

public void onResume() {
    super.onResume();

    if (getListView() != null) {
        updateData();
        String tagName = "android:switcher:" + R.id.pager + ":" + 2;
        Bill f3 = (Bill)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
        f3.updateData2();
    }
}

my fragment 3 code to receive update: 我的片段3代码接收更新:

void updateData2() {
    EventController controller = new EventController(getActivity());
    Intent objIntent = getActivity().getIntent();
    String eventId = objIntent.getStringExtra("eventId");   
    total = (TextView) getActivity().findViewById(R.id.displaytotal);
    total.setText(controller.getTotal(eventId));
}

my viewpager code: 我的viewpager代码:

public class DashboardActivity2 extends FragmentActivity implements TabListener{

private ViewPager viewPager;
private TabsPagerAdapter2 mAdapter;
private ActionBar actionBar;
// Tab titles
    private String[] tabs = { "Participant", "Expense","Bill" };

    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter2(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }

        /**
         * on swiping the viewpager make respective tab selected
         * */
        viewPager
                .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                    @Override
                    public void onPageSelected(int position) {
                        // on changing the page
                        // make respected tab selected
                        actionBar.setSelectedNavigationItem(position);
                    }

                    @Override
                    public void onPageScrolled(int arg0, float arg1,
                            int arg2) {
                    }

                    @Override
                    public void onPageScrollStateChanged(int arg0) {
                    }
                });
    }

    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(arg0.getPosition());
    }

    @Override
    public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }
  }

This is my LogCat : 这是我的LogCat:

11-16 05:46:08.912: E/AndroidRuntime(17241): FATAL EXCEPTION: main
11-16 05:46:08.912: E/AndroidRuntime(17241): java.lang.NullPointerException
11-16 05:46:08.912: E/AndroidRuntime(17241):    at com.example.hapshare.Expense.onResume(Expense.java:109)
11-16 05:46:08.912: E/AndroidRuntime(17241):    at android.support.v4.app.Fragment.performResume(Fragment.java:1521)
11-16 05:46:08.912: E/AndroidRuntime(17241):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:963)
11-16 05:46:08.912: E/AndroidRuntime(17241):    at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:823)
11-16 05:46:08.912: E/AndroidRuntime(17241):    at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1128)

The only thing I can think of is that the Fragment could become detached from the Activity when not visible. 我唯一能想到的是,当不可见时,片段可能会与活动分离。 So, in updateData2() you should avoid doing anything that requires the Activity (like getActivity()). 因此,在updateData2()中,您应该避免做任何需要Activity的事情(例如getActivity())。 Save the data and don't do anything with it until you get to the onResume() method. 保存数据,直到使用onResume()方法之前,不要对其进行任何处理。

BTW, I found out that onAttach() is called before onCreate(). 顺便说一句,我发现onAttach()在onCreate()之前被调用。 So, you could do anything that requires the Activity in onCreate(), onCreateView(), or onStart() as well as onResume(). 因此,您可以执行onCreate(),onCreateView()或onStart()以及onResume()中需要Activity的任何操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM