2017-10-13 222 views
-2

我很难理解静态变量。任何人都可以解释为什么当我在FragmentJoy中调用变量'startingDate'时,它不会返回正确的值吗?假设所有其他的代码工作正常,而不是NULL值和databaseCategories工作正常。如何在'onDataChange()'方法内保存一个值并在FragmentJoy中使用它?从一个类访问静态变量到另一个类

我无法删除:

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

这是仪表盘活动

public class Dashboard extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

static String startingDate; 
DatabaseReference databaseCategories; 
ArrayList<Category> currentJoyCategories; 


User currentUser; //holds the information of the current user 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dashboard); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    . . . . . . 

    databaseCategories = FirebaseDatabase.getInstance().getReference("Categories"); 

    currentJoyCategories = new ArrayList<>(); 

    databaseCategories.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

       //want to do 
       startingDate = "some string"; 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} //end of Dashboard class 

在另一类我想做的事:

public class FragmentJoy extends Fragment { 

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

     //not storing the string "some string" 
     System.out.println("testing " + Dashboard.startingDate); 

     return view; 

} //end of onCreateView method 
} //end of class 
+0

更好的方法是为此创建接口。 –

回答

2

您必须声明你startingDatepublic static String startingDate

使用本

public static String startingDate; 

,而不是这个

static String startingDate; 

然后你可以使用它在你的FragmentJoy这样

Log.e("testing ",Dashboard.startingDate); 
+0

好的,但你确定通常是一个好主意,像这样公开类级非常量变量? –

+0

@TimBiegeleisen nop –

+0

其返回NULL仍然 – Lazaro

0

在这里,我向您展示如何使用一个class的静态方法给另一个cla SS。

例如我在HomeFragment类中定义一个静态方法,

公共类HomeFragment扩展BaseFragment {

Unbinder unbinder; 
    int mode; 

    public static HomeFragment getInstance(int mode) { 
     HomeFragment homeFragment = new HomeFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putInt(KeyUtil.KEY_MODE, mode); 
     homeFragment.setArguments(bundle); 
     return homeFragment; 
    } 
    .................... 
} 

而且,我已经在我的MainActivity课堂上使用这种static方法,

public class MainActivity extends AppCompatActivity { 

    ........................... 

     /** 
     * Get the fragment while need to push. 
     * 
     * @return: fragment 
     */ 
     private Fragment openFragment() { 
      switch (navItemIndex) { 
       case 0: 
        // Here I have called static method 
        return HomeFragment.getInstance(0); 
       } 
     } 

     ........................ 
    }