我想从第二个活动中获取一个值,以便在一个单独的类(fragmentPageAdapter)中使用它。首先,使用Intent.putExtra(key_name,string)将此值从我的主活动传递到第二个活动。所以在我的第二个活动中,我使用getIntent()。getStringExtra(key_name)再次检索此值。但是我想在我的第二个活动中使用这个特定值,但是在我的fragmentPageAdapter中是一个单独的类。所以我想我在第二个活动中使用了一个getter,这样我就可以在fragmetnPageAdapter类中检索这个值。但是我会得到一个nullpointerexception。
在我的第二项活动中,我正在使用这个吸气剂:
public String getMyItem(){
return getIntent().getStringExtra("selectedItem");
}
这就是我的fragmentPageAdapter类的样子:
class myPagerAdapter extends FragmentPagerAdapter {
MySecondActivity mySecondActivity = new MySecondActivity();
public myPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
if(mySecondActivity.getMyItem().equals("ride_height")){
if(i==0){
fragment = new fragment_ride_height_overview();
}
if(i==1){
fragment = new fragment_ride_height_measure();
}
if(i==2){
fragment = new fragment_ride_height_adjust();
}
}
return fragment;
}
@Override
public int getCount() {
return 3; //nothing implemented here yet...
}
}
nullpointerexception如下所示:
java.lang.NullPointerException
at com.example.offroad_set_up_guide.MySecondActivity.getMyItem(MySecondActivity.java:73)
at com.example.offroad_set_up_guide.myPagerAdapter.getItem(MySecondActivity.java:86)
现在奇怪的是,如果我将getter更改为下面的代码,它确实可以正常工作。
public String getMyItem(){
return "ride_height";
}
所以我认为检索“selectedItem”的数据会出错。所以我确实使用了Toast注释(本来可以使用我想的日志函数...)函数来打印出:getIntent()。getStringExtra(“selectedItem”)。无论何时在屏幕上打印,我都会得到一个值为“ride_height”的字符串。谁能告诉我这里我做错了什么,真的很感激:)。
注意: 忽略公共Fragment getItem()函数中if语句的错误使用,这只是为了测试而写的。
编辑:
我想我没有充分澄清我的问题。这是我的完整代码:
public class MySecondActivity extends FragmentActivity implements ActionBar.TabListener {
ActionBar actionBar;
ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_2);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new myPagerAdapter(getFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
actionBar.setSelectedNavigationItem(i);
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
actionBar = getActionBar();
if (actionBar != null) {
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
List<String> tabNames = new ArrayList<String>();
tabNames.addAll(getIntent().getStringArrayListExtra("tabNames"));
for (String tabName : tabNames) {
actionBar.addTab(actionBar.newTab()
.setText(tabName)
.setTabListener(this));
}
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
public String getMyItem(){
return getIntent().getStringExtra("selectedItem");
//return "ride_height";
}
}
class myPagerAdapter extends FragmentPagerAdapter {
MySecondActivity mySecondActivity = new MySecondActivity();
public myPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
if(mySecondActivity.getMyItem().equals("ride_height")){
if(i==0){
fragment = new fragment_ride_height_overview();
}
if(i==1){
fragment = new fragment_ride_height_measure();
}
if(i==2){
fragment = new fragment_ride_height_adjust();
}
}
return fragment;
}
@Override
public int getCount() {
return 3; //nothing implemented here yet...
}
}
MySecondActivity由我的主要活动(使用listview侦听器)启动,代码如下:
Intent intent = new Intent(getBaseContext() , MySecondActivity.class);
intent.putExtra("selectedItem", "ride_height");
intent.putStringArrayListExtra("tabNames", tabNames.get(i).getTabNames());
startActivity(intent);
我只是不明白为什么我得到一个返回getIntent()。getStringExtra(“selectedItem”);.希望这会为你们澄清一点。
答案 0 :(得分:4)
MySecondActivity mySecondActivity = new MySecondActivity();
getIntent
返回用于启动Activity的意图,它永远不会为null,但是当您尝试使用new运算符实例化Activity
时。你永远不应该直接处理Acitivity对象,你应该总是依赖于框架(看看活动的生命周期)。
编辑
您可以向适配器构造函数
添加第二个参数class myPagerAdapter extends FragmentPagerAdapter {
private String mItem;
public myPagerAdapter(FragmentManager fm, String item) {
super(fm);
mItem = item;
}
和getItem
if("ride_height".equals(mItem)) {
和onCreate
new myPagerAdapter(getFragmentManager(), getIntent().getStringExtra("selectedItem"))
请注意,使适配器返回null可能会导致应用程序崩溃