- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从第二个 Activity 中获取一个值,以便在单独的类(fragmentPageAdapter)中使用它。首先,使用 Intent.putExtra(key_name, string) 将这个值从我的主 Activity 传递到我的第二个 Activity 。因此,在我的第二个 Activity 中,我使用 getIntent().getStringExtra(key_name) 再次检索该值。但是,我想不在我的第二个 Activity 中使用这个特定值,而是在我的fragmentPageAdapter(这是一个单独的类)中使用。所以我想我在第二个 Activity 中使用 getter,以便我可以在我的 fragmetnPageAdapter 类中检索该值。但是我会得到一个空指针异常。
在我的第二个 Activity 中,我使用这个 setter/getter :
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...
}
}
空指针异常看起来像这样:
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”的字符串。谁能告诉我我在这里做错了什么,我将非常感激:)。
注意:忽略公共(public) 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 由我的主要 Activity (带有 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");。希望这能为你们澄清一点。
最佳答案
MySecondActivity mySecondActivity = new MySecondActivity();
getIntent
返回用于启动 Activity 的 Intent,并且它永远不会为 null,但是当您尝试使用 new 运算符实例化 Activity
时。您永远不应该直接处理 Acitivity 对象,而应该始终依赖框架(查看 Activity 的生命周期)。
编辑
您可以向适配器构造函数添加第二个参数
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 可能会使您的应用程序崩溃
关于java - getIntent() 上的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24897753/
您好,我正在尝试将 Activity 更改为 fragment ,以便将其添加到滑动布局中,我想我快完成了(除非任何人都可以在我的代码中看到任何其他错误)但我找不到在任何地方解决我的问题,它说'get
我有点困惑为什么在 RoutineRetrieved 函数中分配 ACTIVITYIMAGE 时使用 result.getInt(2) 并在分配 SLOT 时使用 result.getInt(3)..
我想从第二个 Activity 中获取一个值,以便在单独的类(fragmentPageAdapter)中使用它。首先,使用 Intent.putExtra(key_name, string) 将这个值
我有一个如下定义的 oracle 表: create table image_table_test (id number primary key, image ordsys.ordimage); 当我
/* * GETINTDRIVER -- program to call an integer reading function * * Compiling: put the getint fu
学习如何制作 Android 应用程序,我完成了这个教程。图的摘要在这里: http://sketchytech.blogspot.com/2012/10/android-simple-user-in
我是 android 应用程序的新手。我正在开发一个聊天应用程序。我使用了 RecyclerView 和内部 recyclerview 适配器,我在 Activity 开始时传递一个数据 下面是我的代
我正在通过这样的 Intent 从另一个 Activity 中获取 byteArray: if (view == null) { view = new ImageVie
我正在尝试将字符串从主要 Activity 传递到从服务扩展的另一个类。我从 main 的 onCreate 方法发送它: Intent phoneintent = new Intent(MainAc
我的程序由一个 MainActivity 和两个 fragment Activity 组成。我需要一个 fragment 从用户那里获取一个字符串值并将其传递给第二个 fragment 。 我正在努力
我不明白为什么我们使用方法 getIntent()。 因为,当我们需要那个方法时,我们可以使用方法onActivityResult()。 但是通过使用方法getIntent(),它可能会导致NullP
以下方法在 Activity 打开时返回空指针异常。有人知道为什么吗?调用 getIntent() 时是否与不存在 Intent 有关? 如有任何帮助,我们将不胜感激。 日志: 04-21 15:38
在 getView() 方法中,我想调用 getIntent()。在不开始新 Activity 的情况下如何实现这一目标。像这样的getView方法 public View getView(final
带你来看看mybatis为什么报"Invalid value for getInt()"这个错误。 背景 使用mybatis遇到一个非常奇葩的问题,错误如下: Cause: org.apache.ib
Firebase 提供以下方法: getBoolean() getByteArray() getDouble() getLong() getString() https://firebase.goog
此代码启动 Activity : Intent intent = new Intent(context, GameActivity.class); intent.putExtra("load"
我有一个问题,此代码仅返回默认值 -1。我尝试调试,它有值(value),所以我不知道为什么它总是返回-1。 private static final String KEY_CATEGORY_ID =
我在 app_restrictions.xml 中有这个: 现在,如果我想阅读它,我会得到 > java.lang.ClassCastException: java.lang.String cann
我有这个方法: public String givenCheckmark(String name, String date) { SQLiteDatabase db = Cache.open
在这里,resultSet.getInt() 不起作用,但我不知道我的代码出了什么问题。 我想增加列的值(名称为变量“出勤”)。使用 SELECT 语句我想读取当前值,通过使用 UPDATE 我想将相
我是一名优秀的程序员,十分优秀!