Android 将传呼机从ON向后滑动
在包装器活动中按下backbutton时,我需要以编程方式更改寻呼机的幻灯片,但在onBackPressed内调用pager.setCurrentItem(1)时,应用程序将关闭 代码:Android 将传呼机从ON向后滑动,android,android-viewpager,Android,Android Viewpager,在包装器活动中按下backbutton时,我需要以编程方式更改寻呼机的幻灯片,但在onBackPressed内调用pager.setCurrentItem(1)时,应用程序将关闭 代码: public class MainActivity extends FragmentActivity { static final int NUM_ITEMS = 3; static int fSelected = 1; MyAdapter mAdapter; ViewPager mPager; // A
public class MainActivity extends FragmentActivity {
static final int NUM_ITEMS = 3;
static int fSelected = 1;
MyAdapter mAdapter;
ViewPager mPager;
// ADAPTER
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return FirstFragment.init(position);
case 1:
return SecondFragment.init(position);
case 2:
return ThirdFragment.init(position);
default:
return null;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context mContext = getApplicationContext();
playAppearAnimation(mContext);
// ANIM
playAppearAnimation(getApplicationContext());
final ViewPager mPager = findViewById(R.id.pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(1);
//disabilita lo scroll by touch0
mPager.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return false;
}
});
// BACK TO RETRIEVE PASSWORD
TextView button = (TextView)findViewById(R.id.lost_password);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPager.setCurrentItem(0);
}
});
/*
button = (Button)findViewById(R.id.goto_last);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {+
mPager.setCurrentItem(NUM_ITEMS-1);
}
});*/
// ANIMAZIONE DEL RECUPERA PASSWORD
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
public void onPageSelected(int position) {
// NASCONDO LOST PASSWORD
View lostPassword = (TextView)findViewById(R.id.lost_password);
//Toast.makeText(getApplicationContext(),""+position, Toast.LENGTH_LONG).show();
//>> HIDE / UNHIDE lost password
switch(position){
case 0:
fSelected = 0;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out));
break;
case 1:
fSelected = 1;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in));
break;
case 2:
fSelected = 2;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out));
break;
}
}
});
}
public void playAppearAnimation(Context context){
ImageView logo = findViewById(R.id.logo);
ImageView logotype = findViewById(R.id.logotype);
logo.startAnimation(AnimationUtils.loadAnimation(context, R.anim.logo_anim));
logotype.startAnimation(AnimationUtils.loadAnimation(context, R.anim.logo_anim));
com.ubris.design.test1.NonSwipeableViewPager pager = findViewById(R.id.pager);
pager.startAnimation(AnimationUtils.loadAnimation(context, R.anim.anim_fragments));
}
@Override
public void onBackPressed() {
mPager.setCurrentItem(0);
}
Logcat:
public class MainActivity extends FragmentActivity {
static final int NUM_ITEMS = 3;
static int fSelected = 1;
MyAdapter mAdapter;
ViewPager mPager;
// ADAPTER
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return FirstFragment.init(position);
case 1:
return SecondFragment.init(position);
case 2:
return ThirdFragment.init(position);
default:
return null;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context mContext = getApplicationContext();
playAppearAnimation(mContext);
// ANIM
playAppearAnimation(getApplicationContext());
final ViewPager mPager = findViewById(R.id.pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(1);
//disabilita lo scroll by touch0
mPager.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return false;
}
});
// BACK TO RETRIEVE PASSWORD
TextView button = (TextView)findViewById(R.id.lost_password);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPager.setCurrentItem(0);
}
});
/*
button = (Button)findViewById(R.id.goto_last);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {+
mPager.setCurrentItem(NUM_ITEMS-1);
}
});*/
// ANIMAZIONE DEL RECUPERA PASSWORD
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
public void onPageSelected(int position) {
// NASCONDO LOST PASSWORD
View lostPassword = (TextView)findViewById(R.id.lost_password);
//Toast.makeText(getApplicationContext(),""+position, Toast.LENGTH_LONG).show();
//>> HIDE / UNHIDE lost password
switch(position){
case 0:
fSelected = 0;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out));
break;
case 1:
fSelected = 1;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in));
break;
case 2:
fSelected = 2;
lostPassword.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out));
break;
}
}
});
}
public void playAppearAnimation(Context context){
ImageView logo = findViewById(R.id.logo);
ImageView logotype = findViewById(R.id.logotype);
logo.startAnimation(AnimationUtils.loadAnimation(context, R.anim.logo_anim));
logotype.startAnimation(AnimationUtils.loadAnimation(context, R.anim.logo_anim));
com.ubris.design.test1.NonSwipeableViewPager pager = findViewById(R.id.pager);
pager.startAnimation(AnimationUtils.loadAnimation(context, R.anim.anim_fragments));
}
@Override
public void onBackPressed() {
mPager.setCurrentItem(0);
}
java.lang.NullPointerException:尝试调用虚拟方法“void”
null上的android.support.v4.view.ViewPager.setCurrentItem(int)“”
对象引用
位于com.ubris.design.test1.MainActivity.onBackPressed(MainActivity.java:155)
位于android.app.Activity.onKeyUp(Activity.java:2826)
位于android.view.KeyEvent.dispatch(KeyEvent.java:2766)
位于android.app.Activity.dispatchKeyEvent(Activity.java:3146)
位于com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:353)
在android.view.ViewRootImpl$viewPostimeiInputStage.processKeyEvent(ViewRootImpl.java:4742)中
在android.view.ViewRootImpl$viewPostimeiInputStage.onProcess中(ViewRootImpl.java:4713)
在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:4249)
在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4302)中
在android.view.ViewRootImpl$InputStage.forward中(ViewRootImpl.java:4268)
在android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4395)中
在android.view.ViewRootImpl$InputStage.apply上(ViewRootImpl.java:4276)
在android.view.ViewRootImpl$AsyncInputStage.apply上(ViewRootImpl.java:4452)
在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:4249)
在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4302)中
在android.view.ViewRootImpl$InputStage.forward中(ViewRootImpl.java:4268)
在android.view.ViewRootImpl$InputStage.apply上(ViewRootImpl.java:4276)
在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:4249)
在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4302)中
在android.view.ViewRootImpl$InputStage.forward中(ViewRootImpl.java:4268)
在android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4428)中
在android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4589)中
在android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2512)
在android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2106)中
在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2097)中
在android.view.inputmethod.InputMethodManager$IMInputEventSender.onInputEventFinished(InputMethodManager.java:2487)中
位于android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
在android.os.MessageQueue.nativePollOnce(本机方法)
下一步(MessageQueue.java:356)
位于android.os.Looper.loop(Looper.java:138)
位于android.app.ActivityThread.main(ActivityThread.java:6523)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)上
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)上以斜体显示
从代码中删除
super.onBackPressed()
——在这种情况下通常会关闭应用程序
UPD.:当您发布代码时,问题现在已经清楚了。
更改
final ViewPager mPager=findviewbyd(R.id.pager)代码>到mPager=findviewbyd(R.id.pager)
分配其值,而不是创建局部变量。从代码中删除super.onBackPressed()
——在这种情况下,通常会关闭应用程序
UPD.:当您发布代码时,问题现在已经清楚了。
更改final ViewPager mPager=findviewbyd(R.id.pager)代码>到mPager=findviewbyd(R.id.pager)
指定其值,而不是创建局部变量。@Override public void onBackPressed(){mPager.setCurrentItem(0);}1。检查是否使用调试器或Log.d(“标记”、“消息”)
调用了该方法。。。2.检查logcat是否有错误,很可能只是一个崩溃,然后发布NullPointerException的完整错误报告以及添加到post@Overridepublic void onBackPressed(){mPager.setCurrentItem(0);}1。检查是否使用调试器或Log.d(“标记”、“消息”)
调用了该方法。。。2.检查logcat是否有错误,很可能只是一个崩溃,然后发布NullPointerException的完整错误报告以及添加到post中的活动代码