2012-04-21 4 views
0

Essayer de faire fonctionner cela ... il se charge très bien, dit même à l'application qu'elle a fini d'obtenir toutes les données. Cependant, il ne remplit pas la liste.Ne pas remplir un ListView avec un AsyncTask

La réponse de données à l'intérieur de mArrayList.toString(): [A, B, C, D]

public class MainActivity extends ActionBarActivity { 
private static final String DEBUG_TAG = "MainActivity"; 
private boolean mAlternateTitle = false; 
ListView lv; 
private ArrayList<Show> mArrayList; 
ShowsAdapter adapter; 
AlertDialog mAlertDialog; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mArrayList = new ArrayList<Show>(); 
    lv = (ListView) findViewById(R.id.list); 
    adapter = new ShowsAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mArrayList); 

    ShowsList show_list = new ShowsList(); 
    show_list.execute(); 

    lv.setAdapter(adapter); 
    lv.setOnItemClickListener(new ListClickListener()); 
} 

private class ShowsList extends AsyncTask<Void, Void, List<Show>> { 
    @Override 
    protected void onPreExecute() { 
     mAlertDialog = new AlertDialog.Builder(MainActivity.this).setIcon(R.drawable.ic_action_refresh).setTitle(R.string.fetching_new).show(); 
    } 

    @Override 
    protected List<Show> doInBackground(Void... voids) { 
     final String DEBUG_TAG = "MainActivity$ShowList$doInBackground"; 
     try { 
      for (Show show : Show.getShows()) { 
       Log.d(DEBUG_TAG, show.toString()); 
       mArrayList.add(show); 
      }; 
      return mArrayList; 
     } catch (Exception e) { 
      new AlertDialog.Builder(MainActivity.this.getApplicationContext()).setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.server_down_title).setMessage(R.string.server_down_message).setPositiveButton(R.string.app_quit, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        MainActivity.this.finish(); 
       } 
      }).show(); 
      return null; 
     } 
    } 

    @Override 
    protected void onPostExecute(final List<Show> show_list) { 
     if (mAlertDialog.isShowing()) { 
      mAlertDialog.dismiss(); 
     } 
     adapter.notifyDataSetChanged(); 
    } 
} 

private class ListClickListener implements AdapterView.OnItemClickListener { 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     Show show = mArrayList.get(i); 
     Toast.makeText(MainActivity.this, "Clicked on a list item: " + show.title, Toast.LENGTH_LONG).show(); 
    } 
} 

private class ShowsAdapter extends ArrayAdapter<Show> { 
    final String DEBUG_TAG = "MainActivity$ShowsAdapter"; 
    public ShowsAdapter(Context context, int textViewResourceId, List<Show> shows) { 
     super(context, textViewResourceId, shows); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Show show = this.getItem(position); 

     if (convertView == null) { 
      convertView = getLayoutInflater().inflate(R.layout.list_row_show, parent, false); 
     } 
     ((TextView) convertView.findViewById(R.id.show_title)).setText(show.title); 
     //Log.d(DEBUG_TAG, (String)((TextView) convertView.findViewById(R.id.show_title)).getText()); 
     //((TextView) convertView.findViewById(R.id.episode_number)).setText(episode.getGrayLine()); 
     return convertView; 
    } 
} 

Juste au cas où il pourrait être un problème avec la mise en page [main.xml]:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    </ListView> 

</FrameLayout> 

list_show_row.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"> 

    <TextView 
      android:textSize="17.0dip" 
      android:textStyle="bold" 
      android:textColor="#ff000000" 
      android:gravity="center_vertical" 
      android:id="@+id/show_title" 
      android:layout_width="fill_parent" 
      android:layout_height="0.0dip" 
      android:text="Show Title" 
      android:layout_weight="1.0" 
      /> 

    <TextView 
      android:textStyle="italic" android:textColor="#ff666666" 
      android:id="@+id/episode_number" 
      android:layout_width="fill_parent" android:layout_height="0.0dip" android:text="Episode Number" android:layout_weight="1.0" /> 

</LinearLayout> 
+0

est-ce que cela vous donne votre code d'alerte? – JRaymond

+0

La boîte de dialogue d'alerte affiche "Récupérer des données" - la chaîne que je lui ai définie. Quand il est terminé, le dialogue alertdialog rejette réellement sans erreurs. –

+0

voyez-vous cette sortie de journal dans votre logcat? (Log.d (DEBUG_TAG, mArrayList.toString());) –

Répondre

1

ne réglez pas fill_parent sur le layout_height de l'élément racine de la mise en page de list_row_show.xml.

Questions connexes