Agent K
Agent K

Reputation: 351

How to make 500 Questions Quiz in android with single activity?

I am creating an android app, where I'll be asking for multiple types of questions using RadioButtons. I don't want to make multiple Activities for these questions. Can anyone please tell me how to do that with a short example, of at least two questions?

Upvotes: 1

Views: 1097

Answers (1)

Rodrigo Gontijo
Rodrigo Gontijo

Reputation: 587

You can use multiples fragments... or call the activity itself multiple times... I did an app like yours and i choose the first method!

This is some fragment of a project that i wrote, and the activity that manipulate it, you will have to change it according to your needs.

Activity

public class CollectActivity extends FragmentActivity {

    MyPageAdapter pageAdapter;
    NonSwipeableViewPager pager;
    SpringIndicator springIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collect);
        List<Fragment> fragments = getFragments();
        pager = (NonSwipeableViewPager) findViewById(R.id.view_pager);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        PagerModelManager manager = new PagerModelManager();
        manager.addCommonFragment(fragments, getTitles());


        ModelPagerAdapter adapter = new ModelPagerAdapter(getSupportFragmentManager(), manager);
        pager.setAdapter(adapter);
        springIndicator = (SpringIndicator) findViewById(R.id.indicator);
        springIndicator.setViewPager(pager);
        springIndicator.setOnTabClickListener(new TabClickListener() {
            @Override
            public boolean onTabClick(int position) {
                return false;
            }
        });


    }

    private List<Fragment> getFragments() {
        List<Fragment> fList = new ArrayList<Fragment>();
        fList.add(CollectFragment.newInstance("Fragment 1"));
        fList.add(CollectFragment.newInstance("Fragment 2"));
        fList.add(CollectFragment.newInstance("Fragment 3"));
        //add your fragments with a loop

        return fList;
    }

    private List<String> getTitles() {
        return Lists.newArrayList("1", "2", "3");
    }


    public void swipeFragment() {

        pager.setCurrentItem(pager.getCurrentItem() + 1);

    }

    public int getFragment() {
        return pager.getCurrentItem();

    }


}

Fragment

public class CollectFragment extends Fragment {
    private Button openButton;
    private Button confirmationCloseButton;
    private Button yesRenew;
    private Button noRenew;
    private BroadcastReceiver udpMessages;

    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";


    public static final CollectFragment newInstance(String message) {
        CollectFragment f = new CollectFragment();
        Bundle bdl = new Bundle(1);
        bdl.putString(EXTRA_MESSAGE, message);
        f.setArguments(bdl);
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        String message = getArguments().getString(EXTRA_MESSAGE);
        View v = null;
        if (message.compareTo("Fragment 1") == 0) {
            v = inflater.inflate(R.layout.fragment_collect_open, container, false);
            openButton = (Button) v.findViewById(R.id.open_button);
            openButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i2 = new Intent();
                    i2.setComponent(new ComponentName("qira.com.locker", "qira.com.locker.Service.MessageService"));
                    i2.putExtra("Message", "CONFIRM_LOCKER_1_CLOSED");
                    getContext().startService(i2);
                }
            });
        }
        if (message.compareTo("Fragment 2") == 0) {
            v = inflater.inflate(R.layout.fragment_collect_close, container, false);
            confirmationCloseButton = (Button) v.findViewById(R.id.confirmation_close_button);
            confirmationCloseButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i2 = new Intent();
                    i2.setComponent(new ComponentName("qira.com.locker", "qira.com.locker.Service.MessageService"));
                    i2.putExtra("Message", "OPEN_LOCKER_1");
                    getContext().startService(i2);
                }
            });
        }
        if (message.compareTo("Fragment 3") == 0) {
            v = inflater.inflate(R.layout.fragment_collect_renew, container, false);
            yesRenew = (Button) v.findViewById(R.id.yes_button);
            noRenew = (Button) v.findViewById(R.id.no_button);


            yesRenew.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ((CollectActivity) getActivity()).swipeFragment();
                }
            });


            noRenew.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i = new Intent(getContext(), ReserveActivity.class);
                    startActivity(i);
                }
            });
        }

        return v;
    }

    @Override
    public void onResume() {
        super.onResume();
        udpMessages = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction() != null && intent.getAction().equals("UDP.MESSAGES.COLLECT")) {
                    if (intent.getExtras().getString("Type").compareTo("OPEN_LOCKER_1-LOCKER_OPENED") == 0) {
                        if (((CollectActivity) getActivity()).getFragment() != 0) {   // onCreateView called twice, dont know why... workaround to solve this problem
                            ((CollectActivity) getActivity()).swipeFragment();
                        }
                    }
                    if (intent.getExtras().getString("Type").compareTo("CONFIRM_LOCKER_1_CLOSED-TRUE") == 0) {
                        if (((CollectActivity) getActivity()).getFragment() != 1) {   // onCreateView called twice, dont know why... workaround to solve this problem
                            ((CollectActivity) getActivity()).swipeFragment();
                        }
                    }

                }
            }
        };

        getContext().registerReceiver(udpMessages, new IntentFilter("UDP.MESSAGES.COLLECT"));

    }

    @Override
    public void onPause() {
        super.onPause();
        getContext().unregisterReceiver(udpMessages);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();

    }


}

Upvotes: 5

Related Questions