2014-11-06 245 views
1

我是Android开发者的完整初学者,所以我遵循我可以找到的指南。我想从ArrayList填充一个ListFragment。到目前为止,我使用http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/来获得一个滑动菜单,该菜单在点击菜单中的项目时显示不同的片段。然后我用使用ArrayList来轮询ListFragment

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 
    } 
     } 

来填充ListFragment。

我想使用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()中,因为ListFragment中没有ListView(我认为),因此findViewById()不起作用。

谢谢! Makrand

+0

检查ArrayList的大小可能是其0.1 – 2014-11-06 05:02:19

+0

你得到任何错误? – GrIsHu 2014-11-06 05:45:39

回答

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); 

    } 

您已设置adapterlistview,但你忘了列表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