title: How To Use List Adapter
body: <p>My app displays information from a database in a ListView. </p>
  
  <p>In the ListView, there is also a VideoView which is supposed to load and play a video from my website.</p>
  
  <p>In a separate app with only this function, I got it to work. The difference is that in the working app the videoview is located IN the <em>activity_main.xml</em> file, whereas in my new app, the videoview is located in a separate list_item.xml file which is loaded into activity_main.xml as a ListView.</p>
  
  <p>I was told by another stack overflow user that because the VideoView is not in activity_main.xml, I'd have to create a ListAdapter and have the getView() method of the list adapter reference my list_item.xml layout file.</p>
  
  <p>I found a tutorial on ListAdapters but it seemed that the context was too different from what I'm trying to achieve for me to be able to adapt it to my use.</p>
  
  <p>Can someone help me understand how I might go about implementing a ListAdapter that would work with my current code?</p>
  
  <p>Thanks in advance, I really appreciate the help.</p>
  
  <p><strong>BELOW ARE MY FILES</strong></p>
  
  <p><strong>activity_main.xml:</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"&gt;
  &lt;!-- Main ListView 
       Always give id value as list(@android:id/list)
  --&gt;
  &lt;ListView
      android:id="@android:id/list"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"/&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p><strong>list_item.xml:</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical" &gt;
  
  &lt;!-- Name Label --&gt;
  &lt;TextView
      android:id="@+id/name"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:paddingTop="6dip"
      android:paddingLeft="6dip"
      android:textSize="17dip"
      android:textStyle="bold" /&gt;
  
      &lt;VideoView
       android:id="@+id/videoView"
       android:layout_width="100dp"
       android:layout_height="100dp"
       /&gt;
  
              &lt;ImageButton
      android:id="@+id/imageButton2"
      android:layout_width="60dp"
      android:layout_height="60dp"
      android:src="@drawable/ic_videobutton"
      android:onClick="sendMessage" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p><strong>AllProductsActivity.java:</strong></p>
  
  <pre><code>package com.example.androidhive;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  
  import org.apache.http.NameValuePair;
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import android.app.ListActivity;
  import android.app.ProgressDialog;
  import android.content.Intent;
  import android.net.Uri;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.AdapterView.OnItemClickListener;
  import android.widget.ListAdapter;
  import android.widget.ListView;
  import android.widget.MediaController;
  import android.widget.SimpleAdapter;
  import android.widget.TextView;
  import android.widget.VideoView;
  
  public class AllProductsActivity extends ListActivity {
  
  // Progress Dialog
  private ProgressDialog pDialog;
  
  // Creating JSON Parser object
  JSONParser jParser = new JSONParser();
  
  ArrayList&lt;HashMap&lt;String, String&gt;&gt; productsList;
  
  // get video url
  private static final String MOVIE_URL ="http://mywebsite.com/mycameraapp/android_connect/videos/testvideo.mkv";
  
  // url to get all products list
  private static String url_all_products = "http://mywebsite.com/mycameraapp/android_connect/get_all_products.php";
  
  // JSON Node names
  private static final String TAG_SUCCESS = "success";
  private static final String TAG_PRODUCTS = "products";
  private static final String TAG_PID = "pid";
  private static final String TAG_NAME = "name";
  private static final String TAG_DESCRIPTION = "description";
  
  // products JSONArray
  JSONArray products = null;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.all_products);
  
  
  
      // **MY VIDEOVIEW CODE THAT DOESN'T WORK BECAUSE THIS VIDEOVIEW IS IN list_item.xml**
      VideoView vid = (VideoView) findViewById(R.id.videoView);
      Uri video = Uri.parse(MOVIE_URL);
      vid.setMediaController(new MediaController(this));
      vid.setVideoURI(video);
      vid.start();
      vid.requestFocus();
  
  
  
      // Hashmap for ListView
      productsList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
      // Loading products in Background Thread
      new LoadAllProducts().execute();
  
      // Get listview
      ListView lv = getListView();
  
      // on seleting single product
      // launching Edit Product Screen
      lv.setOnItemClickListener(new OnItemClickListener() {
  
          @Override
          public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                  int position, long id) {
              // getting values from selected ListItem
              String pid = ((TextView) view.findViewById(R.id.pid)).getText()
                      .toString();
  
              // Starting new intent
              Intent in = new Intent(getApplicationContext(),
                      EditProductActivity.class);
              // sending pid to next activity
              in.putExtra(TAG_PID, pid);
  
              // starting new activity and expecting some response back
              startActivityForResult(in, 100);
          }
      });
  
  
  }
  
  /** CALLED WHEN THE USER CLICKS THE RECORD BUTTON */
  public void sendMessage(View view) {
      Intent videoIntent = new Intent(this, PhotoIntentActivity.class);
      startActivity(videoIntent);
  }
  
  // Response from Edit Product Activity
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      // if result code 100
      if (resultCode == 100) {
          // if result code 100 is received 
          // means user edited/deleted product
          // reload this screen again
          Intent intent = getIntent();
          finish();
          startActivity(intent);
      }
  
  }
  
  /**
   * Background Async Task to Load all product by making HTTP Request
   * */
  class LoadAllProducts extends AsyncTask&lt;String, String, String&gt; {
  
      /**
       * Before starting background thread Show Progress Dialog
       * */
      @Override
      protected void onPreExecute() {
          super.onPreExecute();
          pDialog = new ProgressDialog(AllProductsActivity.this);
          pDialog.setMessage("Loading products. Please wait...");
          pDialog.setIndeterminate(false);
          pDialog.setCancelable(false);
          pDialog.show();
      }
  
      /**
       * getting All products from url
       * */
      protected String doInBackground(String... args) {
          // Building Parameters
          List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
          // getting JSON string from URL
          JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
  
          // Check your log cat for JSON reponse
          Log.d("All Products: ", json.toString());
  
          try {
              // Checking for SUCCESS TAG
              int success = json.getInt(TAG_SUCCESS);
  
              if (success == 1) {
                  // products found
                  // Getting Array of Products
                  products = json.getJSONArray(TAG_PRODUCTS);
  
                  // looping through All Products
                  for (int i = 0; i &lt; products.length(); i++) {
                      JSONObject c = products.getJSONObject(i);
  
                      // Storing each json item in variable
                      String id = c.getString(TAG_PID);
                      String name = c.getString(TAG_NAME);
                      String description = c.getString(TAG_DESCRIPTION);
  
                      // creating new HashMap
                      HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
  
                      // adding each child node to HashMap key =&gt; value
                      map.put(TAG_PID, id);
                      map.put(TAG_NAME, name);
                      map.put(TAG_DESCRIPTION, description);
  
                      // adding HashList to ArrayList
                      productsList.add(map);
                  }
              } else {
                  // no products found
                  // Launch Add New product Activity
                  Intent i = new Intent(getApplicationContext(),
                          NewProductActivity.class);
                  // Closing all previous activities
                  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                  startActivity(i);
              }
          } catch (JSONException e) {
              e.printStackTrace();
          }
  
          return null;
      }
  
      /**
       * After completing background task Dismiss the progress dialog
       * **/
      protected void onPostExecute(String file_url) {
          // dismiss the dialog after getting all products
          pDialog.dismiss();
          // updating UI from Background Thread
          runOnUiThread(new Runnable() {
              public void run() {
                  /**
                   * Updating parsed JSON data into ListView
                   * */
                  ListAdapter adapter = new SimpleAdapter(
                          AllProductsActivity.this, productsList,
                          R.layout.list_item, new String[] { TAG_PID, TAG_NAME, TAG_DESCRIPTION},
                          new int[] { R.id.pid, R.id.name, R.id.description });
                  // updating listview
                  setListAdapter(adapter);
  
              }
  
  
          });
  
      }
  
  }
  
  }
  </code></pre>