簡體   English   中英

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

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

我正在嘗試從片段3更新片段3中的textview,但它返回我nullpointerexception。 但是,當我從片段1更新片段2(列表視圖)時,它可以正常工作。 我想知道是什么問題,有人可以指導我嗎? 謝謝。

我的片段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();
    }
}

我的片段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));
}

我的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

    }
  }

這是我的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)

我唯一能想到的是,當不可見時,片段可能會與活動分離。 因此,在updateData2()中,您應該避免做任何需要Activity的事情(例如getActivity())。 保存數據,直到使用onResume()方法之前,不要對其進行任何處理。

順便說一句,我發現onAttach()在onCreate()之前被調用。 因此,您可以執行onCreate(),onCreateView()或onStart()以及onResume()中需要Activity的任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM