You can do it, I did the same using these links, here is my code that I share with you in the hope that it will be useful for you ... First you will need to create 4 layouts, 2 of which will be for landscape mode, one for portrait mode and the other for tablets. You need to create a couple more folders for layouts, and their name should be both layout-xlarge and layout-xlarge-port , so you can create fragments for both mobile devices and tablets.
Activity MasterFragment:
public class MasterFragment extends ListFragment { Boolean isDualPane; int position; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ArrayList<String> parkNames = new ArrayList<String>(); for (Park park : Resort.PARKS) { parkNames.add(park.getName()); } setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, parkNames)); View detailFrame = getActivity().findViewById(R.id.detail); isDualPane = detailFrame != null && detailFrame.getVisibility() == View.VISIBLE; if (savedInstanceState != null) { position = savedInstanceState.getInt("position", 0); } if (isDualPane) { getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); showDetail(position); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("position", position); } @Override public void onListItemClick(ListView l, View v, int position, long id) { showDetail(position); } void showDetail(int position) { this.position = position; if (isDualPane) { getListView().setItemChecked(position, true); DetailFragment detailFragment = (DetailFragment) getFragmentManager() .findFragmentById(R.id.detail); if (detailFragment == null || detailFragment.getIndex() != position) { detailFragment = new DetailFragment(position); FragmentTransaction ft = getFragmentManager() .beginTransaction(); ft.replace(R.id.detail, detailFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } else { Intent intent = new Intent(); intent.setClass(getActivity(), DetailActivity.class); intent.putExtra("position", position); startActivity(intent); } } }
The second activity is DetailFragment Activity:
public class DetailActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.detail_act); Bundle bundle = getIntent().getExtras(); int position = bundle.getInt("position"); System.out.println("RR : position is : " + position); Integer[] images = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, R.drawable.pic9, R.drawable.pic10, R.drawable.pic11, R.drawable.pic12, R.drawable.pic13 }; final ImageView imgview = (ImageView) findViewById(R.id.imageView1); imgview.setImageResource(images[position]);
Now you need to create the third action, MasterGridActivity for my images, which I use to display in the fragment in the GridView .
public class MasterGridActivity extends Fragment { Boolean isDualPane; GridView gridView; ListView listView; int position; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.gridview, container, false); gridView = (GridView) view.findViewById(R.id.gridViewImage); gridView.setAdapter(new MyAdapter(view.getContext())); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { View detailFrame = getActivity().findViewById(R.id.detail); isDualPane = detailFrame != null && detailFrame.getVisibility() == View.VISIBLE; gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { if (!isDualPane) { Intent intent = new Intent(); intent.setClass(getActivity(), DetailActivity.class); intent.putExtra("position", pos); startActivity(intent); } else { DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detail); if (detailFragment == null || detailFragment.getIndex() != pos) { detailFragment = new DetailFragment(pos); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.detail, detailFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } } }); super.onActivityCreated(savedInstanceState); } }
Now here is my image adapter - MyAdapter - for my images that extend the BaseAdapter .
public class MyAdapter extends BaseAdapter { private Context mContext; public MyAdapter(Context c) { mContext = c; } @Override public int getCount() { return mThumbIds.length; } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) {
Now I am using XML files for these snippets.
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <fragment android:id="@+id/master" android:layout_width="match_parent" android:layout_height="match_parent" class="org.fragment.MasterGridActivity" /> </LinearLayout>
gridview.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridViewImage" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:columnWidth="90dp" android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:gravity="center" android:stretchMode="columnWidth" /> </LinearLayout>
detail_fragment.xml . This XML is intended to display details in another fragment.
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="8dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="8dp" /> </LinearLayout> </ScrollView>
detail_act.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/ic_launcher" /> </LinearLayout>
Make the same XML for landscape mode and for tablets. It works great for me. Hope this helps you.