Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ArrayList编辑ListFragment_Java_Android_Arraylist_Android Listfragment - Fatal编程技术网

Java 使用ArrayList编辑ListFragment

Java 使用ArrayList编辑ListFragment,java,android,arraylist,android-listfragment,Java,Android,Arraylist,Android Listfragment,我是一个完全的Android开发初学者,所以我遵循我能找到的指南。我想从ArrayList填充ListFragment。到目前为止,我已经得到了一个滑动菜单,当单击菜单中的项目时,它会显示不同的片段。然后我用 package de.vogella.android.fragments; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.A

我是一个完全的Android开发初学者,所以我遵循我能找到的指南。我想从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
  }
        } 
package de.vogella.android.fragments;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.app.ListFragment;
公共类MyListFragment扩展了ListFragment{
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
字符串[]值=新字符串[]{“Android”、“iPhone”、“WindowsMobile”,
“黑莓”、“WebOS”、“Ubuntu”、“Windows7”、“Max OS X”,
“Linux”、“OS/2”};
ArrayAdapter=新的ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1,值);
setListAdapter(适配器);
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
//对数据做点什么
}
} 
填充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();             
            }
        });
    }
}
package com.example.triage;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
private List patients=new ArrayList();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populatePatientList();
populateListView();
registerClickCallback();
}
私有void populatePatientList(){
新增(新患者(“Vijay Vazirani”,0));
增加(新患者(“杰武”,2));
新增(新患者(“Nadia Magnenat Thalmann”,3));
增加(新患者(“Andrew Ng”,1));
添加(新患者(“Steve Omohundro”,0));
增加(新患者(“Joseph Sifakis”,4));
增加(新患者(“Eva Tardos”,2));
增加(新患者(“康拉德·祖斯”,1));
}
私有void populateListView(){
ArrayAdapter=新PatientListAdapter();
ListView patientList=(ListView)findViewById(R.id.ListPatientUser);
patientList.setAdapter(适配器);
}
私有类PatientListAdapter扩展了ArrayAdapter{
公共耐心适应者(){
super(MainActivity.this、R.layout.view\u list\u项目、患者);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获得一个工作视图
视图项视图=转换视图;
如果(itemView==null){
itemView=GetLayoutFlater()。充气(R.layout.view\u list\u项,父项,false);
}
//找到要与之合作的患者
患者当前患者=患者。获取(位置);
//患者姓名
TextView name text=(TextView)itemView.findViewById(R.id.listItem\u textPatientName);
nameText.setText(currentPatient.getName());
//急迫
TextView urgencyText=(TextView)itemView.findViewById(R.id.listItem\u TextureGencyValue);
urgencyText.setText(currentPatient.getUrgency());
返回项目视图;
}
}
私有无效注册表ClickCallback(){
ListView列表=(ListView)findViewById(R.id.ListPatientUser);
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
患者单击患者=患者。获取(位置);
Toast.makeText(MainActivity.this,clickedPatient.getName(),Toast.LENGTH_SHORT.show();
}
});
}
}
有人能告诉我怎么做吗?每次尝试时,我都会被方法
populateListView()
卡住,因为ListFragment(我认为)中没有ListView,因此
findViewById()
不起作用

谢谢!
Makrand

答对了,问题在于你的
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);

    }
private void populateListView(){
ArrayAdapter=新PatientListAdapter();
//将患者列表添加到适配器
用于(患者p:患者)
{
添加(p);
}
ListView patientList=(ListView)findViewById(R.id.ListPatientUser);
patientList.setAdapter(适配器);
}
您已将
适配器设置为
列表视图
,但忘记将患者列表
插入适配器,因此您的
适配器
没有数据,而
列表视图
不显示任何内容。

尝试此操作

public PatientListAdapter(Context context,List<Patient> patients){
            super(context, R.layout.view_list_item, patients);
}
public PatientListAdapter(上下文,列出患者){
超级(上下文、右布局、视图、列表、患者);
}

ArrayAdapter adapter=新的PatientListAdapter(此为患者);

并且更喜欢使用
getApplicationContext()
而不是
MainActivity。此

检查数组列表大小可能为0。是否有任何错误?
 ArrayAdapter<Patient> adapter = new PatientListAdapter(this,patients);