Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p><a href="http://developer.android.com/guide/components/fragments.html" rel="nofollow">HEre is a link to Fragments From Android</a> And below is code to a project using fragments The code below also uses <a href="https://github.com/nostra13/Android-Universal-Image-Loader" rel="nofollow">universalimageloader</a> and <a href="http://actionbarsherlock.com/" rel="nofollow">ActionBarSherlock</a> although i didnt really do much with the actionbar. This code also uses <a href="http://developer.android.com/training/basics/fragments/communicating.html" rel="nofollow">interfaces</a> that communicate between the fragments and the main SherlockFragmentActivity. I have shown 2 different fragments being used. List fragment that can load data from one site or another and a Details fragment that gets its data from a interface setup with the Fragment Control Activity. Good Luck and happy coding.</p> <p>The Details Fragment</p> <pre><code>import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragment; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; public class DetailsFrag extends SherlockFragment { public static final String TAG = "detailsfrag"; private boolean typeFlag; private GetData gd; private DisplayImageOptions dio = null; private ImageLoader il; private ImageView image; private TextView name; private TextView data_box_1; private TextView data_box_2; private HashMap&lt;String, Object&gt; fragData; static DetailsFrag newInstance() { DetailsFrag frag = new DetailsFrag(); return frag; } public interface GetData { public HashMap&lt;String, Object&gt; getData(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { gd = (GetData) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement GetData"); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflate, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); setHasOptionsMenu(true); il = ImageLoader.getInstance(); dio = new DisplayImageOptions.Builder() .showStubImage(R.drawable.kzfr_logo).cacheInMemory() .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20)) .build(); View result = inflate.inflate(R.layout.details_frag, container, false); image = (ImageView) result.findViewById(R.id.image); data_box_1 = (TextView) result.findViewById(R.id.data_box_1); data_box_2 = (TextView) result.findViewById(R.id.data_box_2); name = (TextView) result.findViewById(R.id.name); fragData = gd.getData(); String imagePath = (String) fragData.get("image"); il.displayImage(imagePath, image, dio); Toast.makeText(getSherlockActivity(), "Image path " + imagePath, Toast.LENGTH_LONG).show(); String title = (String) fragData.get("title"); name.setText(title); String times = (String) fragData.get("times"); data_box_1.setText(times); String data2 = (String) fragData.get("short_description"); data_box_2.setText(data2); return result; } } </code></pre> <p>Here is the List Fragment </p> <pre><code> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import com.actionbarsherlock.app.SherlockListFragment; public class ListFrag extends SherlockListFragment { public static final String TAG = "listfrag"; private boolean typeFlag; private String mainUrl; private SetDetails sd; private List&lt;HashMap&lt;String, Object&gt;&gt; data; static ListFrag newInstance(boolean type) { ListFrag frag = new ListFrag(); Bundle args = new Bundle(); args.putBoolean("type", type); frag.setArguments(args); return frag; } public interface SetDetails { public void setDetails(HashMap&lt;String, Object&gt; details); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { sd = (SetDetails) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement setDetails"); } } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); sd.setDetails(data.get(position)); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setRetainInstance(true); // set the type of the listview. Hosts or Programs. setType(); if (typeFlag) { mainUrl = "http://website.org/api/dataset1"; } else { mainUrl = "http://website.org/api/dataset2"; } // begin a download task to download the data needed to populate the // correct list view. if (!checkAdapter()) { DownloadTask dlTask = new DownloadTask(); dlTask.execute(mainUrl); } else { SimpleAdapter adapter = (SimpleAdapter) getListAdapter(); adapter.notifyDataSetChanged(); } } public boolean checkAdapter() { SimpleAdapter adapter = (SimpleAdapter) getListAdapter(); if (adapter != null) return true; else return false; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override public void onResume() { super.onResume(); // SimpleAdapter adapter = (SimpleAdapter) getListAdapter(); // if (adapter != null) // adapter.notifyDataSetChanged(); } private void setType() { Bundle args = this.getArguments(); typeFlag = args.getBoolean("type"); } private boolean checkType() { return typeFlag; } /* * This method connects to the specified url and returns data ready to be * parsed. */ private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream in = null; try { URL url = new URL(strUrl); URLConnection urlConnect = (URLConnection) url.openConnection(); urlConnect.connect(); in = urlConnect.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader( urlConnect.getInputStream())); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { Log.d("Exception while downloading url", e.toString()); } finally { in.close(); } return data; } private class DownloadTask extends AsyncTask&lt;String, Integer, String&gt; { String data = null; @Override protected String doInBackground(String... url) { try { data = downloadUrl(url[0]); } catch (Exception e) { Log.d("Background Task", e.toString()); } return data; } @Override protected void onPostExecute(String result) { ListViewLoaderTask lvLoader = new ListViewLoaderTask(); lvLoader.execute(result); } } private class ListViewLoaderTask extends AsyncTask&lt;String, Void, ImageLoaderListAdapter&gt; { ImageLoaderListAdapter adapter = null; int count; HashMap&lt;String, Object&gt; hm = null; String imgUrl = null; String url = "http://website.org/u/img/original/"; @Override protected ImageLoaderListAdapter doInBackground(String... jsonStr) { List&lt;HashMap&lt;String, Object&gt;&gt; things = null; JSONArray jArray = null; try { jArray = new JSONArray(jsonStr[0]); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } String[] from = { "title", "image", "short_description" }; int[] to = { R.id.program_title, R.id.program_image, R.id.short_description }; if (checkType()) { data1JSONParser data1Parser = new data1JSONParser(); try { things = data1Parser.parse(jArray); } catch (Exception e) { Log.d("Exception", e.toString()); } } else { data2JSONParser data2Parser = new data2JSONParser(); try { things = data2Parser.parse(jArray); } catch (Exception e) { Log.d("Exception", e.toString()); } } count = things.size(); for (int i = 0; i &lt; count; i++) { hm = (HashMap&lt;String, Object&gt;) things.get(i); imgUrl = (String) hm.get("image"); if (!imgUrl.equalsIgnoreCase("false")) { imgUrl = url + imgUrl; hm.put("image", imgUrl); } } //ImageLoaderListAdapter is a Simple List Adapter that uses Universal Image //Loader to load its images if possible. adapter = new ImageLoaderListAdapter(getSherlockActivity() .getBaseContext(), things, R.layout.rowlayout, from, to); data = things; return adapter; } @Override protected void onPostExecute(ImageLoaderListAdapter adapter) { setListAdapter(adapter); ImageLoaderListAdapter ad = (ImageLoaderListAdapter) getListAdapter(); ad.notifyDataSetChanged(); } } } </code></pre> <p>Here is the Fragment Control Activity I</p> <pre><code>import java.util.ArrayList; import java.util.HashMap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.appdomum.doublea.DayFragment.UpdateList; import com.appdomum.doublea.DetailsFrag.GetData; import com.appdomum.doublea.ListFrag.SetDetails; import com.appdomum.doublea.RadioStream.OnProgramSelectedListener; import com.appdomum.doublea.ScheduleFrag.UpdateSchedule; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class FragmentControl extends SherlockFragmentActivity implements GetData, SetDetails { protected ImageLoader imageLoader = ImageLoader.getInstance(); private ListFrag data1Frag; private ListFrag data2Frag; private DetailsFrag detailsFrag; private Fragment visible; private Fragment mVisibleCached; private boolean instanceStateSaved; private HashMap&lt;String, Object&gt; details = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_control); setupFragments(); ImageLoaderConfiguration config = ImageLoaderConfiguration .createDefault(getApplicationContext()); imageLoader.init(config); } public void setupFragments() { final FragmentManager fm = getSupportFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); data1Frag = ((ListFrag) fm.findFragmentByTag("data1".TAG)); if (data1Frag == null) { data1Frag = ListFrag.newInstance(); ft.add(R.id.fragment_container, data1Frag , "data1".TAG); } visible = data1Frag ; ft.commit(); } @Override public void onBackPressed() { super.onBackPressed(); visible = mVisibleCached; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getSupportMenuInflater() .inflate(R.menu.activity_fragment_control, menu); return true; } @Override protected void onDestroy() { if (!instanceStateSaved) { imageLoader.stop(); } super.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { instanceStateSaved = true; } public void showFragment(int fragIn) { int inFrag = fragIn; final FragmentManager fm = getSupportFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); if (visible != null) { ft.hide(visible); mVisibleCached = visible; } switch (fragIn) { case 0: data1Frag = ((ListFrag) fm.findFragmentByTag(data1)); if (data1Frag == null) { data1Frag = ListFrag.newInstance(false); ft.replace(R.id.fragment_container, data1Frag , "data1"); } else { ft.replace(R.id.fragment_container, data1Frag , "data1"); if (!data1Frag .isVisible()) { } } ft.addToBackStack(null); visible = data1Frag ; break; case 1: data2Frag= ((ListFrag) fm.findFragmentByTag("data2")); if (data2Frag== null) { data2Frag= ListFrag.newInstance(true); ft.replace(R.id.fragment_container, data2Frag, "data2"); } else { ft.replace(R.id.fragment_container, data2Frag, "data2"); if (!data2Frag.isVisible()) { } } ft.addToBackStack(null); visible = data2Frag; break; case 2: detailsFrag = ((DetailsFrag) fm.findFragmentByTag(DetailsFrag.TAG)); if (detailsFrag == null) { detailsFrag = DetailsFrag.newInstance(); ft.replace(R.id.fragment_container, detailsFrag, DetailsFrag.TAG); } else { ft.replace(R.id.fragment_container, detailsFrag, DetailsFrag.TAG); if (!detailsFrag.isVisible()) { } } ft.addToBackStack(null); visible = detailsFrag; break; } ft.commit(); } @Override public HashMap&lt;String, Object&gt; getData() { return details; } @Override public void setDetails(HashMap&lt;String, Object&gt; data) { this.details = data; showFragment(2); } } </code></pre> <p>Here is the layout for Fragment Control</p> <pre><code>&lt;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=".FragmentControl" &gt; &lt;FrameLayout android:id="@+id/fragment_container" android:layout_width="fill_parent" android:layout_height="fill_parent" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>Layout for the Details Frag</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/woodtileback" android:padding="10dp" &gt; &lt;TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:paddingBottom="5dip" android:paddingTop="10dip" android:textAlignment="center" /&gt; &lt;ImageView android:id="@+id/image" android:layout_width="300dip" android:layout_height="300dip" android:layout_below="@id/name" android:layout_centerHorizontal="true" android:clickable="true" android:contentDescription="@string/programdescription" /&gt; &lt;TextView android:id="@+id/data_box_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/image" android:layout_centerHorizontal="true" android:padding="5dp" android:textAlignment="center" /&gt; &lt;TextView android:id="@+id/data_box_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/data_box_1" android:layout_centerHorizontal="true" android:padding="5dp" android:textAlignment="center" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>Layout for List Row</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingRight="5dp" &gt; &lt;ImageView android:id="@+id/program_image" android:layout_width="100dip" android:layout_height="100dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:contentDescription="@string/programdescription" android:padding="5dp" /&gt; &lt;LinearLayout android:id="@+id/details" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/program_image" android:orientation="vertical" &gt; &lt;TextView android:id="@+id/program_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" /&gt; &lt;TextView android:id="@+id/short_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" /&gt; &lt;/LinearLayout&gt; &lt;/RelativeLayout&gt; </code></pre> <p>That is about it.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload