- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
试图通过摸索学习Android开发,如果问题太简单,请原谅。
我有以下代码由于 NullPointerException 而不断崩溃 - 我已经尝试了几种方法来访问 fragment 的 View ,但我总是得到 null。谁能帮我解决我做错的事情?
我想做的是在滚动页面时将 EditText 的内容保存到 SharedPreferences。对于我的生活,我似乎无法访问显示选项卡时加载的 fragment 的 View 。
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 3;
// Tab Titles
private String tabtitles[] = new String[] { "Profile", "Address",
"Security"};
Context context;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
switch (position) {
// Open FragmentTab1.java
case 0:
CreateUserFragmentProfile fragmenttab1 = new
CreateUserFragmentProfile();
return fragmenttab1;
// Open FragmentTab2.java
case 1:
CreateUserFragmentLocation fragmenttab2 = new
CreateUserFragmentLocation();
return fragmenttab2;
// Open FragmentTab3.java
case 2:
CreateUserFragmentSecurity fragmenttab3 = new
CreateUserFragmentSecurity();
return fragmenttab3;
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
return tabtitles[position];
}
}
Fragment 代码扩展了 Fragment,几乎什么都不做。
public class CreateUserFragmentSecurity extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
//return super.onCreateView(inflater, container,
savedInstanceState);
View view = inflater.inflate(R.layout.create_fragment_security,
container, false);
return view;
}
public void storeData(){
}
}
Activity代码如下:
public class CreateUser extends AppCompatActivity {
public SharedPreferences preferences;
public SharedPreferences.Editor editor;
public View currView;
public String fname, lname, dob, gender, email, addr1, addr2, addr3,
addrstate, city, passwd, passwdPlain;
public Long mobile, pin;
//public FragmentPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_user);
preferences = getSharedPreferences("Reviv", MODE_PRIVATE);
editor = preferences.edit();
// Locate the viewpager in activity_create_user.xml
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
// Set the ViewPagerAdapter into ViewPager
final FragmentPagerAdapter adapter = new
ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(3);
viewPager.addOnPageChangeListener(new
ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
boolean hasChanged = false;
switch (position){ // store data on tab switch
case 0: // Profile tab
//currView =
viewPager.getChildAt(viewPager.getCurrentItem()); // returns
null
currView =
adapter.getItem(viewPager.getCurrentItem()).getView(); //
crashes, returns null
EditText etFname =
currView.findViewById(R.id.etFname);
fname = etFname.getText().toString();
hasChanged = false;
if(!StringUtils.isEmpty(fname)) {
editor.putString("fname", fname);
hasChanged = true;
}
if(hasChanged == true) editor.commit();
break;
case 1: // Address tab
// currView =
viewPager.getChildAt(viewPager.getCurrentItem()); // returns
null
currView =
adapter.getItem(viewPager.getCurrentItem()).getView();
EditText etAddr1 =
currView.findViewById(R.id.etAddr1);
addr1 = etAddr1.getText().toString();
hasChanged = false;
if(!StringUtils.isEmpty(addr1)) {
editor.putString("addr1", addr1);
hasChanged = true;
}
if(hasChanged == true) editor.commit();
break;
case 2: // Security tab
//currView =
viewPager.getChildAt(viewPager.getCurrentItem()); // returns null
currView =
adapter.getItem(viewPager.getCurrentItem()).getView();
EditText etPasswd =
currView.findViewById(R.id.etPasswd);
passwd = etPasswd.getText().toString();
hasChanged = false;
if(!StringUtils.isEmpty(passwd)) {
editor.putString("passwd", passwd);
hasChanged = true;
}
if(hasChanged == true) editor.commit();
break;
}
}
@Override
public void onPageSelected(int position) {
// do nothing
}
@Override
public void onPageScrollStateChanged(int state) {
// do nothing
}
});
}
}
我的堆栈轨迹如下:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.portmanteau.reviv.CreateUser$1.onPageScrolled(CreateUser.java:58) at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1921) at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1895) at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1833) at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:690) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1777) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:434) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) at android.widget.LinearLayout.onLayout(LinearLayout.java:1544) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:758) at android.view.View.layout(View.java:19678) at android.view.ViewGroup.layout(ViewGroup.java:6057) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2510) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2219) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1405) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6829) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966) at android.view.Choreographer.doCallbacks(Choreographer.java:778) at android.view.Choreographer.doFrame(Choreographer.java:713) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6803) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
最佳答案
尝试这样的事情:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
boolean hasChanged = false;
if (positionOffset > 0) {
currView = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position).getView();
if (currView != null) {
EditText editText = null;
if (position == 0) editText = currView.findViewById(R.id.etPasswdPlain);
else if (position == 1) editText = currView.findViewById(R.id.etAddr1);
else if (position ==2) editText = currView.findViewById(R.id.etFname);
if (editText != null) {
String value = editText.getText().toString();
Log.d("TAG", "Value is " + value);
}
}
}
}
请注意,这仅在您从左向右滑动(从第 1 页到第 2 页以及从第 2 页到第 3 页)时才有效。
即当您从第 1 页滑动到第 2 页时,第 1 页 中的数据将被保存并
当您从第2页滑动到第3页时,第2页中的数据将被保存。
对于从右向左滑动
,假设从第3页滑动到第2页时必须保存第3页数据并保存>page 2 数据从page 2 滑动到page 1,你必须做一些逻辑,但你可以从这里得到想法。
关于android - 无法使用 ViewPager 和 FragmentPagerAdapter 访问 fragment View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862902/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!