怎么在Java中调用已声明的变量
问题描述
我尝试了多种方法在onCreateView中调用已声明的变量'location',但仅显示错误。
首先,我不能使用getIntent(),因为ArrayListFragment是静态类。
由于缺乏我的Java知识,在这种情况下很难找到一种方法。
您的建议将不胜感激。
在下面的onCreateView中注释了我要调用变量的位置。
public class FragmentStatePagerSupport extends FragmentActivity {
MyAdapter myAdapter;
ViewPager mPager;
String location;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.fragment_pager );
location = getIntent().getStringExtra( "name" );
myAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById( R.id.pager );
mPager.setAdapter( myAdapter );
}
private class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@NonNull
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position);
}
@Override
public int getItemPosition(@NonNull Object object) {
return super.getItemPosition( object );
}
@Override
public int getCount() {
return head_array.length;
}
}
public static class ArrayListFragment extends ListFragment {
int mNum;
static ArrayListFragment newInstance(int num){
ArrayListFragment arrayListFragment = new ArrayListFragment();
Bundle bundle = new Bundle( );
bundle.putInt( "num", num );
arrayListFragment.setArguments( bundle );
return arrayListFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
mNum = getArguments() != null ? getArguments().getInt( "num" ) : 1;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate( R.layout.fragment_pager_list, container, false );
//Here, I want to call a variable 'location' that is declared in FragmentStatePagerSupport class//
return v;
}
}
}
思路一:
这里有一个很大的问题;因为您永远不要将外部类设为私有,因为没有人可以访问它。如果您不想多次创建它,请尝试使其成为Singleton类。如果添加父类也很好,它们与理解您的想法和对象关系非常相关。顶级类永远不能是静态的,私有的,受保护的……您甚至不必声明它们是公共的。创建具有此类限制的类的唯一方法是使用嵌套类。无论如何,我认为您可能正在寻找的是将修饰符添加到局部变量。如果我没看错,您正在尝试将String传递到位置,因此应这样声明:private String location = getIntent().getStringExtra( "name" );
在静态类内部,将变量声明为static。 ArrayListFragment的构造函数也不应该是静态的。从概念上讲,它也是没有意义的,因为所有类的构造函数都是相同的。由于您在做什么,我想您可能正在尝试制作Singleton。为此,请创建一个私有构造函数和一个调用该构造函数的public static
方法(在类内部)。
思路二:
[这是因为
ArrayListFragment
类是静态的。
怎么在Java中调用已声明的变量的内容,小编给大家一一解答出来了,在阅读过程中遇到什么问题的话,欢迎来给小编留言。
上一篇:Tiintint返回所存在的问题