2014-11-06 2 views
1

Я полный новичок для Android Dev, поэтому я следую инструкциям, которые я могу найти. Я хочу заполнить ListFragment из ArrayList. До сих пор я использовал http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/, чтобы получить скользящее меню, которое показывает разные фрагменты, когда нажимаются элементы в меню. Затем я использовалPolulate ListFragment с использованием ArrayList

package de.vogella.android.fragments; 

import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.app.ListFragment; 

public class MyListFragment extends ListFragment { 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2" }; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
    // do something with the data 
    } 
     } 

для заполнения списка.

Вместо этого я хочу использовать ArrayList. Я хочу использовать этот код:

package com.example.triage; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private List<Patient> patients = new ArrayList<Patient>(); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     populatePatientList(); 
     populateListView(); 
     registerClickCallback(); 
    } 

    private void populatePatientList() { 
     patients.add(new Patient("Vijay Vazirani", 0)); 
     patients.add(new Patient("Jie Wu", 2)); 
     patients.add(new Patient("Nadia Magnenat Thalmann", 3)); 
     patients.add(new Patient("Andrew Ng", 1)); 
     patients.add(new Patient("Steve Omohundro", 0)); 
     patients.add(new Patient("Joseph Sifakis", 4)); 
     patients.add(new Patient("Eva Tardos", 2)); 
     patients.add(new Patient("Konrad Zuse", 1)); 
    } 

    private void populateListView() { 
     ArrayAdapter<Patient> adapter = new PatientListAdapter(); 
     ListView patientList = (ListView) findViewById(R.id.listPatientsInER); 
     patientList.setAdapter(adapter); 

    } 

    private class PatientListAdapter extends ArrayAdapter<Patient> { 
     public PatientListAdapter(){ 
      super(MainActivity.this, R.layout.view_list_item, patients); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // get a view to work with 
      View itemView = convertView; 
      if(itemView == null){ 
       itemView = getLayoutInflater().inflate(R.layout.view_list_item, parent, false); 
      } 

      // find the patient to work with 
      Patient currentPatient = patients.get(position); 

      //patient name 
      TextView nameText = (TextView)itemView.findViewById(R.id.listItem_textPatientName); 
      nameText.setText(currentPatient.getName()); 

      //Urgency 
      TextView urgencyText = (TextView)itemView.findViewById(R.id.listItem_textUrgencyValue); 
      urgencyText.setText(currentPatient.getUrgency()); 

      return itemView; 
     } 

    } 

    private void registerClickCallback() { 
     ListView list = (ListView) findViewById(R.id.listPatientsInER); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Patient clickedPatient = patients.get(position); 
       Toast.makeText(MainActivity.this, clickedPatient.getName(), Toast.LENGTH_SHORT).show();    
      } 
     }); 
    } 
} 

Может ли кто-нибудь помочь мне в этом, как это сделать? Каждый раз, когда я пытаюсь, я зацикливаюсь на методе populateListView(), потому что нет ListView в ListFragment (я думаю), и поэтому findViewById() не работает.

Спасибо! Makrand

+0

проверки размера ArrayList может быть его 0. –

+0

ли вы получить какую-либо ошибку? – GrIsHu

ответ

1

Бинго, проблема заключается в вашем populateListView:

private void populateListView() { 
     ArrayAdapter<Patient> adapter = new PatientListAdapter(); 
     //add the list patients to your adapter 
     for(Patient p: patients) 
     { 
      adapter.add(p); 
     } 
     ListView patientList = (ListView) findViewById(R.id.listPatientsInER); 
     patientList.setAdapter(adapter); 

    } 

Вы установили adapter к listview, но вы забыли вставить список patients к адаптеру, следовательно, ваш adapter не имеет никаких данных и ваш listview ничего не отображает.

0

попробовать этот

public PatientListAdapter(Context context,List<Patient> patients){ 
      super(context, R.layout.view_list_item, patients); 
} 

и

ArrayAdapter<Patient> adapter = new PatientListAdapter(this,patients); 

и предпочитают использовать getApplicationContext() над MainAcitivity.this

Смежные вопросы