Android Studio从MainActivity访问Fragment方法

特拉卡西

我在Fragment中访问方法确实遇到了麻烦的问题。

我得到的错误

流程:com.crelix.crelix,PID:18913 java.lang.NullPointerException:尝试在com.crelix.crelix.NavigationActivity的空对象引用上调用虚拟方法'void com.crelix.crelix.ClickerFragment.refreshViews()'。在com.crelix.crelix.NavigationActivity $ 1 $ 1.run(NavigationActivity.java:84)在android.os.Handler.handleCallback(Handler.java:810)处刷新(NavigationActivity.java:530) (Handler.java:99)在android.os.Looper.loop(Looper.java:189)在android.app.ActivityThread.main(ActivityThread.java:5529)在java.lang.reflect.Method.invoke(本机方法),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:950)处com.android.internal.os.ZygoteInit处的java.lang.reflect.Method.invoke(Method.java:372)处。主要(ZygoteInit.java:745)

我的片段示例:

    package com.crelix.crelix;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;

import org.w3c.dom.Text;

public class ClickerFragment extends Fragment {

        public static ClickerFragment newInstance() {
            ClickerFragment fragment = new ClickerFragment();
        return fragment;
    }

    public ClickerFragment() {
    }

private TextView MoneyText;
private TextView MoneyPerTapTView;
private TextView BoxesText;
private TextView BoxesPerTapTView;
private ProgressBar progressBar;

MainHolder Main = new MainHolder();

public void refreshViews(){
    MoneyText.setText("Money: " +Main.Money[0]);
    MoneyPerTapTView.setText("$ " + Main.Money[1] + " per tap");
    BoxesText.setText("Boxes: " + Main.Boxes[0] + "/100");
    BoxesPerTapTView.setText("Points " + Main.Boxes[1] + " per tap");
    progressBar.setProgress(Main.Boxes[0]);
}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_clicker, container, false);
        MoneyText = (TextView) rootView.findViewById(R.id.MoneyText);
        MoneyPerTapTView = (TextView) rootView.findViewById(R.id.MoneyPerTapTView);
        BoxesText = (TextView) rootView.findViewById(R.id.BoxesText);
        BoxesPerTapTView = (TextView) rootView.findViewById(R.id.BoxesPerTapTView);
        progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
        return rootView;
    }

}

我想从MainActivity访问它,例如:

 public void Refresh()
{
    ClickerFragment ClickerFragment = (ClickerFragment) getSupportFragmentManager().findFragmentById(R.id.ClickerFragment);
    ClickerFragment.refreshViews();
}

在这里我添加我的片段

 public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    Fragment fragment = null;
    if (id == R.id.nav_clicker) {
        fragment = new ClickerFragment();
    } else if (id == R.id.nav_upgrades) {
        fragment = new UpgradeFragment();
    } else if (id == R.id.nav_warehouse) {
        fragment = new WarehouseFragment();
    } else if (id == R.id.nav_postservice) {
        fragment = new PostserviceFragment();
    } else if (id == R.id.nav_shop) {
        fragment = new ShopFragment();
    } else if (id == R.id.nav_market) {
        fragment = new MarketFragment();
    } else if (id == R.id.nav_workshop) {
        fragment = new WorkshopFragment();
    } else if (id == R.id.nav_garage) {
        fragment = new GarageFragment();
    } else if (id == R.id.nav_museum) {
        fragment = new MuseumFragment();
    } else if (id == R.id.nav_collections) {
        fragment = new CollectionsFragment();
    }
    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
    }
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
耶稣爱你

findFragmentById当片段在活动中静态嵌入XML中并指定了时,才可以使用android:id

在您的情况下,该片段似乎是在运行时在活动中动态添加的。所以,你可以查找该片段由标签通过调用findFragmentByTagFragmentManager在中onNavigationItemSelected,您需要更改为:

public boolean onNavigationItemSelected(MenuItem item) {
  // Handle navigation view item clicks here.
  int id = item.getItemId();
  String TAG = "";
  Fragment fragment = null;
  if (id == R.id.nav_clicker) {
    fragment = new ClickerFragment();
    TAG = "CLICKER_TAG";
  } else if (id == R.id.nav_upgrades) {
    fragment = new UpgradeFragment();
    TAG = "UPDATE_TAG";
  }
  // You need to add TAG to another fragment.
  ...

  getSupportFragmentManager().beginTransaction(). 
              replace(R.id.frame_container, fragment, TAG).
              commit();
  ...
  return true;
}

现在您可以按标签查找片段:

ClickerFragment clickerFragment  = (ClickerFragment) getSupportFragmentManager()
                                                    .findFragmentByTag("CLICKER_TAG");
// Now you have the fragment
// But remember to check if the fragment null
if(clickerFragment != null) {
  ClickerFragment.refreshViews();
}

创建和使用片段上阅读更多内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android-如何从Fragment访问父活动中的getter方法

来自分类Dev

Android-如何从Fragment访问父活动中的getter方法

来自分类Dev

Android:在Fragment类中访问View对象

来自分类Dev

取消EditText输入->重新创建MainActivity(Android Studio)

来自分类Dev

Fragment和FragmentList不显示Android Studio

来自分类Dev

无法解析android.support.v4.app.Fragment(版本21.0.3)Android Studio中的方法getContext()

来自分类Dev

在Android中从MainActivity调用TextView到Fragment

来自分类Dev

Android-从MainActivity调用方法到Fragment

来自分类Dev

从统一活动返回到Android Studio中的MainActivity

来自分类Dev

如何通过使用Android Studio 4.1中的ViewBinding访问MainActivity.kt中的content_main.xml元素?

来自分类Dev

Mainactivity.kt无法识别Android Studio Kotlin中的ID

来自分类Dev

如何在Android Studio中从MainActivity.java访问xml gui对象?

来自分类Dev

子片段的过去值-> mainactivity无法将fragment_fr_event_Birthday强制转换为fragment_fr_event_wedding android studio

来自分类Dev

Android:从MainActivity访问片段实例

来自分类Dev

Android:如何从Fragment中的MainActivity获取MediaPlayer对象?

来自分类Dev

ActionBar:如何从MainActivity访问Fragment的方法?

来自分类Dev

Android Studio错误访问被拒绝?

来自分类Dev

Android:如何更改Fragment中从MainActivity接收数据的视图

来自分类Dev

与Android Studio中的MainActivity.java混淆

来自分类Dev

来自MainActivity的Android Studio“刷新”片段布局

来自分类Dev

在android studio的MainActivity中新建一行

来自分类Dev

Android Studio 2.3.2 MainActivity 不显示

来自分类Dev

Android 从 Fragment 调用 Fragment 方法

来自分类Dev

Android Studio 中关于 Fragment 的困惑

来自分类Dev

从android MainActivity访问js变量

来自分类Dev

从 MainActivity 调用 Fragment 的方法

来自分类Dev

kotlin Android studio listView 在 Fragment 中

来自分类Dev

Android Studio - MainActivity.java 看不到 id 属性

来自分类Dev

Android Studio OnSharedPreferenceChangedListener 在 MainActivity 中不起作用

Related 相关文章

  1. 1

    Android-如何从Fragment访问父活动中的getter方法

  2. 2

    Android-如何从Fragment访问父活动中的getter方法

  3. 3

    Android:在Fragment类中访问View对象

  4. 4

    取消EditText输入->重新创建MainActivity(Android Studio)

  5. 5

    Fragment和FragmentList不显示Android Studio

  6. 6

    无法解析android.support.v4.app.Fragment(版本21.0.3)Android Studio中的方法getContext()

  7. 7

    在Android中从MainActivity调用TextView到Fragment

  8. 8

    Android-从MainActivity调用方法到Fragment

  9. 9

    从统一活动返回到Android Studio中的MainActivity

  10. 10

    如何通过使用Android Studio 4.1中的ViewBinding访问MainActivity.kt中的content_main.xml元素?

  11. 11

    Mainactivity.kt无法识别Android Studio Kotlin中的ID

  12. 12

    如何在Android Studio中从MainActivity.java访问xml gui对象?

  13. 13

    子片段的过去值-> mainactivity无法将fragment_fr_event_Birthday强制转换为fragment_fr_event_wedding android studio

  14. 14

    Android:从MainActivity访问片段实例

  15. 15

    Android:如何从Fragment中的MainActivity获取MediaPlayer对象?

  16. 16

    ActionBar:如何从MainActivity访问Fragment的方法?

  17. 17

    Android Studio错误访问被拒绝?

  18. 18

    Android:如何更改Fragment中从MainActivity接收数据的视图

  19. 19

    与Android Studio中的MainActivity.java混淆

  20. 20

    来自MainActivity的Android Studio“刷新”片段布局

  21. 21

    在android studio的MainActivity中新建一行

  22. 22

    Android Studio 2.3.2 MainActivity 不显示

  23. 23

    Android 从 Fragment 调用 Fragment 方法

  24. 24

    Android Studio 中关于 Fragment 的困惑

  25. 25

    从android MainActivity访问js变量

  26. 26

    从 MainActivity 调用 Fragment 的方法

  27. 27

    kotlin Android studio listView 在 Fragment 中

  28. 28

    Android Studio - MainActivity.java 看不到 id 属性

  29. 29

    Android Studio OnSharedPreferenceChangedListener 在 MainActivity 中不起作用

热门标签

归档