murty
murty

Reputation: 43

How can i add imageslider in fragment and Why i do get adapter(adapter) error?

Hello I'm trying to add imageslider to my activity but i get error

Following this tutorial..

In this position i get this error on line 45:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference

And on line 45 is:

sds.setAdapter(adapter);

Here is my actvity.java

public class Sayfalar extends AppCompatActivity implements View.OnClickListener {

    private TabLayout tabLayout;
    private ViewPager viewPager,sds;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sayfalar);

        sds = (ViewPager) findViewById(R.id.resimler);
        PagerAdapter adapter = new CustomAdapter(Sayfalar.this);
        sds.setAdapter(adapter);


        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

    public void showDialog (View v){
        MyDialog dialog = new MyDialog();
        dialog.show(getSupportFragmentManager(),"my_dialog");
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new Fragment1(), "Fragment1");
        adapter.addFrag(new Fragment2(), "Fragment2");
        adapter.addFrag(new Fragment3(), "Fragment3");
        adapter.addFrag(new Fragment4(), "Fragment4");
        adapter.addFrag(new Fragment5(), "Fragment5");
        adapter.addFrag(new Fragment6(), "Fragment6");
        adapter.addFrag(new Fragment7(), "Fragment7");
        adapter.addFrag(new Fragment8(), "Fragment8");
        adapter.addFrag(new Fragment9(), "Fragment9");
        viewPager.setAdapter(adapter);
    }

    public void onClick(View view) {


        }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

Here is My activity.xml

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/popupmenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="scrollable"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

If i add this code to my activity.xml i see my pictures in all fragments but i want it in one fragment.

Here is the code :

<ImageView
        android:id="@+id/resim"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

And here is one of the fragment.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=".Kaynaklar.Agil">


    <android.support.v4.view.ViewPager
        android:id="@+id/resimler"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</RelativeLayout>

here is the fragment1.java

public class Fragment1 extends Fragment {

    public Fragment1 () {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment1, container, false);
    }

}

Upvotes: 1

Views: 1009

Answers (3)

msevgi
msevgi

Reputation: 4904

You can examine this code.

public class Sayfalar extends AppCompatActivity {
    private TabLayout tabLayout;
    private ViewPager viewPager,sds;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sayfalar);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

    public void showDialog (View v){
        MyDialog dialog = new MyDialog();
        dialog.show(getSupportFragmentManager(),"my_dialog");
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
    }

    public void onClick(View view) {


    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment1 fragment1=Fragment1.newInstance(position);
            return fragment1;
        }

        @Override
        public int getCount() {
            return 5;
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return "title "+position;
        }
    }
}

//Fragment

   public class Fragment1 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view=inflater.inflate(R.layout.fragment,container,false);
            return view;
        }

        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            ImageView imageView= (ImageView) view.findViewById(R.id.imageview);
            imageView.setImageResource(R.mipmap.ic_launcher);
        }

        public static Fragment1 newInstance(int position) {
            Fragment1 fr=new Fragment1();
            Bundle bundle=new Bundle();
            bundle.putInt("position",position);
            fr.setArguments(bundle);
            return fr;
        }
    }

Upvotes: 1

earthw0rmjim
earthw0rmjim

Reputation: 19427

The problem is here:

sds = (ViewPager) findViewById(R.id.resimler);
PagerAdapter adapter = new CustomAdapter(Sayfalar.this);
sds.setAdapter(adapter);

You don't seem to have a ViewPager in your sayfalar layout with the resimler ID, so sds will be null, and then you're trying to call setAdapter() on that null reference.

To set up the second ViewPager in Fragment1, you could do something like this:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment1, container, false);

    ViewPager sds = (ViewPager) view.findViewById(R.id.resimler);
    // assuming CustomAdapter requires an Activity or Context as a constructor param
    PagerAdapter adapter = new CustomAdapter(getActivity());
    sds.setAdapter(adapter);

    return view;
}

Upvotes: 2

Vucko
Vucko

Reputation: 7479

You are making a mistake. You cannot access R.id.resimler in your Activity since that viewPager is declared in the xml of the Fragment. (that's why you get null for this variable):

sds = (ViewPager) findViewById(R.id.resimler);

What you need to do in order to reference this viewPager is to migrate this code into the Fragment's method onCreateView like this:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment1, container, false);
    ViewPager sds = (ViewPager) view.findViewById(R.id.resimler);
    //and do whatever you want with the ViewPager at this point
    return view;
}

Upvotes: 1

Related Questions