Reputation: 29
I am using NonSwipeableViewPager
NonSwipeableViewPager.Java
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
}
I have MainActivity in Which I am using this ViewPager with Two Fragments
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.advancetechindia.fragmenttest.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Hello"
android:textSize="20sp"
android:textStyle="bold" />
<com.advancetechindia.fragmenttest.NonSwipeableViewPager
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/viewpager_id"/>
</LinearLayout>
</RelativeLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private NonSwipeableViewPager viewpager;
private FragmentFirst fragmentFirst=new FragmentFirst();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager=(NonSwipeableViewPager)findViewById(R.id.viewpager_id);
viewpager.setAdapter(new SamplePagerAdapter(
getSupportFragmentManager()));
}
public void getData(String s) {
Log.d("TAG",s);
viewpager.setCurrentItem(1,true);
}
public class SamplePagerAdapter extends FragmentPagerAdapter {
public SamplePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
/** Show a Fragment based on the position of the current screen */
if (position==0) {
return new FragmentFirst();
} else return new FragmentTwo();
}
@Override
public int getCount() {
return 2;
}
} }
frag_one.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_id"
android:hint="texthere"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_id"
android:text="Fire"
android:onClick="GetString"/>
</LinearLayout>
</RelativeLayout>
FragmentFirst.java
public class FragmentFirst extends Fragment {
private EditText et;
private Button btn;
private MainActivity mainact;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_one, container,
false);
mainact=new MainActivity();
et=(EditText)rootView.findViewById(R.id.et_id);
btn=(Button)rootView.findViewById(R.id.btn_id);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String abc=et.getText().toString();
Log.d("TAG",abc);
mainact.getData(abc);
}
});
return rootView;
} }
Also, i have another Fragment--- FragmentTwo.java
when I click on Fire Button it invokes
getData(String s)
method of MainActivity where I got the string but it shows error on
viewpager.setCurrentItem(int,boolean)
Please let me get out of this hurdle. Thanks
Error
10:54:46.205 31492-31492/com.advancetechindia.fragmenttest E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.advancetechindia.fragmenttest, PID: 31492
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.advancetechindia.fragmenttest.NonSwipeableViewPager.setCurrentItem(int, boolean)' on a null object reference
at com.advancetechindia.fragmenttest.MainActivity.getData(MainActivity.java:30) atcom.advancetechindia.fragmenttest.FragmentFirst$1.onClick(FragmentFirst.java:37)at android.view.View.performClick(View.java:5612)at android.view.View$PerformClick.run(View.java:22285)at android.os.Handler.handleCallback(Handler.java:751)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Upvotes: 1
Views: 374
Reputation: 752
mainact=new MainActivity();
is create new object and ViewPager
alive in Old object so you need to access old object of MainActivity
((MainActivity)getActivity()).getData(abc);
Upvotes: 1
Reputation: 4157
replace this in your FragmentFirst.java
mainact.getData(abc);
with
((MainActivity)getActivity()).getData(abc);
Upvotes: 1