0

I have ListView which brings data from server using AsyncTask. After that onItemClick starts a new Activity which should show more detailed info of the clicked item from the ListView. Pretty simple . But problem is the individual pages should work like 9GAG android app (i.e Swipeable Fragment with ViewPager). The detail info is much more. What are your suggestion for design layout of that page. Currently I am using ViewPager on that single page and Design the fragment to get the required thing.

First Screen Second Detailed Info Screen which needs to designed Ideal thing to happen is like this

Code

public class IndividualPage extends ActionBarActivity{
ArrayList<Item> arrayOfList;
ViewPager pager;
CountryPageAdapter pageAdapter;
    private ProgressBar mProgress;
@Override
    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondpage);

 mProgress = (ProgressBar) findViewById(R.id.linear_progress_bar);

new FilteredResult().execute();

pager = (ViewPager)findViewById(R.id.viewpager);

}

private List<Fragment> getFragments() {
        List<Fragment> frags = new ArrayList<Fragment>();
        System.out.println("fragments main ayya hai");
        cats=arrayOfList;
        for(int i = 0;i<cats.size();i++ ) {
            System.out.println("number : "+i+"::"+cats.get(i).getSector());
            frags.add(prepareFragment(cats.get(i).getImage(),cats.get(i).getName(),cats.get(i).getLocation(),cats.get(i).getSector(),cats.get(i).getStatus(),cats.get(i).getFounded(),cats.get(i).getFundRaising()));
        }
        return frags;
    }

Fragment prepareFragment(String image,String name,String location,String Expertise,String sector,int founded,String fund) {
        CountryFragment cf = new CountryFragment();
        Bundle args = new Bundle();
        args.putString(CountryFragment.STARTUP_IMAGE, image);
        args.putString(CountryFragment.STARTUP_NAME, name);
        args.putString(CountryFragment.STARTUP_LOCATION, location);
        args.putString(CountryFragment.STARTUP_EXP, Expertise);
        args.putString(CountryFragment.STARTUP_SEC, sector);
        args.putInt(CountryFragment.STARTUP_FOUNDED, founded);
        args.putString(CountryFragment.STARTUP_FUND, fund);
        cf.setArguments(args);
        return cf;
    }

 [![public class FilteredResult extends AsyncTask<String, Void, String> {
//onpreexcute  nothing doing great in this 
//onbackground 

 @Override
        protected void onPostExecute(String result) {
        List<Fragment> fragments = getFragments();
        pageAdapter = new CountryPageAdapter(getSupportFragmentManager(), fragments);
        pager.setAdapter(pageAdapter);
     }
}]
codeMagic
  • 44,549
  • 13
  • 77
  • 93
Vaibs_Cool
  • 6,126
  • 5
  • 28
  • 61

2 Answers2

1

I personally prefer ViewPagers to ScrollViews as they do not keep all of the fragment/views in the memory.

Also each individual item is independent of the other ones. For example if you want to be able to implement vertical scrolling for each item you cannot do it with HorizontalScrollView as all the views will scroll together.

hoomi
  • 1,882
  • 2
  • 16
  • 17
  • You mean HorizontalScrollView ? – Vaibs_Cool Sep 24 '15 at 06:56
  • HorizontalScrollView will only contain onechild but i want whole item to be swiped and next item to be loaded using async task – Vaibs_Cool Sep 24 '15 at 07:00
  • You should be able to do this easily with `ViewPager` – hoomi Sep 24 '15 at 07:14
  • i have done it using viewpager only. but second part is getting complex for me. Like there are 7 tabs in websites which needs to be shown in this screen. – Vaibs_Cool Sep 24 '15 at 07:18
  • What is the second part? Your question is a bit vague. I cannot visualize what you are trying to achieve. Showing tabs and loading their content on demand is pretty straight forward. Can you clarify a bit more with some code? – hoomi Sep 24 '15 at 07:25
  • So your problem is how to get the tabs first before initialising the `ViewPager`? – hoomi Sep 24 '15 at 18:09
1

Even im having the same kind of design i have done like this

Class File

import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.util.Log;
import android.widget.LinearLayout;

import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;


public class TurfDetailsActivity extends BaseActivity{

    private SliderLayout mDemoSlider;
    ViewPager pager;
    private ViewPager viewPager;
    private TurfDetailsViewPagerAdapter mAdapter;
    private ActionBar mActionBar;
    LinearLayout SliderImg;
    private PagerSlidingTabStrip tabs;
    String Venue;
    public static Bundle b;
    public static ArrayList<ReviewModel> reviewList;
    public static ArrayList<TimingModel> timigList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_turf_details_1);
        mDemoSlider = (SliderLayout)findViewById(R.id.turf_details_slider);
        reviewList = new ArrayList<ReviewModel>();
        timigList = new ArrayList<TimingModel>();
        actionBarIdForAll("Turf Details");

        String data = getIntent().getStringExtra("data");
        Bundle object = getDataObject(data);
        imageSlider(data);

        tabs = (PagerSlidingTabStrip)findViewById(R.id.tabs);
        viewPager = (ViewPager) findViewById(R.id.pager);
        mActionBar = getSupportActionBar();
        mAdapter = new TurfDetailsViewPagerAdapter(getSupportFragmentManager(), object);

        viewPager.setAdapter(mAdapter);
        mActionBar.setDisplayHomeAsUpEnabled(true);

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                mActionBar.setSelectedNavigationItem(position);
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
        tabs.setViewPager(viewPager);
        tabs.setIndicatorColor(Color.parseColor("#ffffff"));
        tabs.setTextColor(Color.parseColor("#ffffff"));
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        outState = b;
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        b = savedInstanceState;
    }

    private Bundle getDataObject(String data) {
        // TODO Auto-generated method stub
        ReviewModel mReviewModel;
        TimingModel mTimingModel;
        b = new Bundle();
        try {
            JSONObject obj = new JSONObject(data).getJSONArray("venue").getJSONObject(0);
            b.putString("vid", obj.getString("vid"));
            b.putString("venueName", obj.getString("venue_name"));
            Venue = obj.getString("venue_name");
            b.putString("location", obj.getString("location"));
            b.putString("address", obj.getString("address"));
            b.putString("contact", obj.getString("booking_contact"));
            b.putString("turfSize", obj.getString("turf_size"));
            b.putString("formats", obj.getString("preferred_format"));
            b.putString("floodlights", obj.getString("floodlights"));
            b.putString("ball", obj.getString("ball"));
            b.putString("shoeType", obj.getString("shoe_type"));
            b.putString("parking", obj.getString("parking"));
            b.putString("refreshments", obj.getString("refreshments"));
            b.putString("washrooms", obj.getString("washrooms"));
            b.putString("bibs", obj.getString("bibs"));
            b.putString("otherGames", obj.getString("other_games_played"));
            b.putString("coaching", obj.getString("coaching"));
            b.putString("stands", obj.getString("stands"));
            b.putString("website", obj.getString("website"));
            b.putString("latitude", obj.getString("latitude"));
            b.putString("longitude", obj.getString("longitude"));
            b.putString("cost", obj.getString("cost"));
            b.putString("rating", obj.getString("rating"));
            b.putString("createdDate", obj.getString("created_date"));
            b.putString("updatedDate", obj.getString("updated_date"));
            JSONArray array = new JSONObject(data).getJSONArray("reviews");
            if(array.length()!=0){
                for(int i=0;i<array.length();i++){
                    JSONObject obj11 = array.getJSONObject(i);
                    String vid = obj11.getString("vid");
                    String uid = obj11.getString("uid");
                    String email = obj11.getString("email");
                    String created_date = obj11.getString("created_date");
                    String review = obj11.getString("review");
                    String review_user_image = obj11.getString("image");
                    String review_user_name = obj11.getString("name");
                    b.putString("review", review);
                    b.putString("review_user_image", review_user_image);
                    b.putString("review_user_name", review_user_name);

                    mReviewModel = new ReviewModel(vid, uid, review, review_user_image, review_user_name, email, created_date);
                    reviewList.add(mReviewModel);
                }
            }else {
                b.putString("Review_count", "0");
            }

            JSONArray arrayCost = new JSONObject(data).getJSONArray("cost");
            for(int i=0;i<arrayCost.length();i++){
                JSONObject obj12 = arrayCost.getJSONObject(i);
                String vid = obj12.getString("vid");
                String tid = obj12.getString("tid");
                String timing = obj12.getString("timing");
                String created_date = obj12.getString("created_date");
                String weekdays = obj12.getString("weekdays");
                String weekends = obj12.getString("weekends");
                b.putString("timing", timing);
                b.putString("weekdays", weekdays);
                b.putString("weekends", weekends);
                Log.e("timing", timing);
                Log.e("weekdays", weekdays);
                Log.e("weekends", weekends);

                mTimingModel = new TimingModel(vid, tid, timing, weekdays, weekends);
                timigList.add(mTimingModel);
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return b;
    }

    public void imageSlider(String data){

        try {
            JSONArray array = new JSONObject(data).getJSONArray("media");

            if(array.length()!=0){
                for(int i=0;i<array.length();i++){
                    JSONObject obj = array.getJSONObject(i);
                    String url = obj.getString("path");
                    TextSliderView textSliderView = new TextSliderView(this);
                    // initialize a SliderLayout
                    textSliderView.description(Venue).image(url).setScaleType(BaseSliderView.ScaleType.Fit);
                    //add your extra information
                    textSliderView.getBundle().putString("extra","Where is my turf");
                    mDemoSlider.addSlider(textSliderView);
                }
            }else{
                TextSliderView textSliderView = new TextSliderView(this);
                // initialize a SliderLayout
                textSliderView  .description("Where is my turf").image(R.drawable.ic_launcher).setScaleType(BaseSliderView.ScaleType.Fit);
                //add your extra information
                textSliderView.getBundle()  .putString("extra","Where is my turf");

                mDemoSlider.addSlider(textSliderView);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
        mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom);
        mDemoSlider.setCustomAnimation(new DescriptionAnimation());
        mDemoSlider.setDuration(3000);
    }
}

ADAPTER

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;



public class TurfDetailsViewPagerAdapter extends FragmentPagerAdapter {

    private Bundle data;

    public TurfDetailsViewPagerAdapter(FragmentManager fm, Bundle data) {
        super(fm);
        this.data = data;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // TODO Auto-generated method stub
        if (position == 0)
        {
            return "ABOUT";
        }
        if (position == 1)
        {
            return "FEATURES";
        }
        if (position == 2)
        {
            return "COST";
        }
        if (position == 3)
        {
            return "REVIEWS";
        } 
        return null;
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            return new AboutFragment(data);
        case 1:
            return new FeaturesFragment();
        case 2:
            return new CostFragment();
        case 3:
            return new ReviewsFragment();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 4;
    }

}

XML Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1" >

    <LinearLayout
        android:id="@+id/image_forward"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_weight=".35" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="com.daimajia.slider.demo.ImageSliderActivity" >

            <com.daimajia.slider.library.SliderLayout
                android:id="@+id/turf_details_slider"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                custom:auto_cycle="true"
                custom:indicator_visibility="visible"
                custom:pager_animation="Accordion"
                custom:pager_animation_span="1100" />
        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_marginTop="2dp"
        android:layout_weight=".65"
        android:orientation="vertical" >

        <com.PACKAGE.customviews.PagerSlidingTabStrip
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="48dip"
            android:background="#5e5b5b"
            android:paddingLeft="3dp" />

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

</LinearLayout>

Result Image

enter image description here

IF YOU NEED ANY KIND OF HELP FEEL FREE TO ASK.....Happeee...Programming....

Amaresh Jana
  • 732
  • 11
  • 22