Java 使用ListFragment时出错

Java 使用ListFragment时出错,java,android,android-fragments,Java,Android,Android Fragments,我正在尝试使用ListFragment,但是我得到一个错误 这是我的启动程序活动: 包com.example.android.incriminantent import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; public cla

我正在尝试使用
ListFragment
,但是我得到一个错误
这是我的启动程序活动: 包com.example.android.incriminantent

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

public class CrimeListActivity extends FragmentActivity{

    @Override
    public void onCreate(Bundle saved) {
        super.onCreate(saved);
        setContentView(R.layout.activity_fragment);
        FragmentManager fm = getSupportFragmentManager();
        Fragment list_of_crimes_fragment = fm.findFragmentById(R.id.fragmentContainer);
        if (list_of_crimes_fragment==null) {
            list_of_crimes_fragment = new CrimeListFragment();
            fm.beginTransaction()
            .add(R.id.fragmentContainer, list_of_crimes_fragment)
            .commit();
        }
    }
}
CrimeListFragment
正在存储一个
arrayList

如果我们删除这段代码:

ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
                getActivity(),android.R.layout.activity_list_item, mCrimes);
        setListAdapter(adapter);
将oncreate()方法更改为

 @Override
    public void onCreate(Bundle saved) {
        super.onCreate(saved);
        getActivity().setTitle(R.string.crimes_title);
        //Getting the ArrayList<Crime> from CrimeLab using SingleTon pattern
        mCrimes = CrimeLab.get(getActivity()).getCrimes();
        ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
                getActivity(),R.layout.activity_list_item, mCrimes);
        setListAdapter(adapter);
        //R.layout.activity_list_item - is an android pre-defined layout which
        //has simple textView as its root element
    }
@覆盖
创建公共void(已保存捆绑){
super.onCreate(已保存);
getActivity().setTitle(R.string.crimes\u title);
//使用单例模式从CrimeLab获取ArrayList
mCrimes=CrimeLab.get(getActivity()).getCrimes();
ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),R.layout.activity\u list\u项,mCrimes);
setListAdapter(适配器);
//R.layout.activity_list_item-是一个android预定义的布局
//将simple textView作为其根元素
}

解决方案就是改变

ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
            getActivity(),android.R.layout.activity_list_item, mCrimes);
ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),android.R.layout.activity\u list\u项,mCrimes);

ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),android.R.layout.simple_list_item_1,mCrimes);
我需要的是一个用于显示列表的标准android布局,
由于
android.R.layout.activity\u list\u item
编译得很好,并且没有报告任何错误-错误并不明显)

ArrayAdapter的实现需要一个TextView

331  if (convertView == null) {
332      view = mInflater.inflate(resource, parent, false);
333   } else {
334      view = convertView;
335   }
336
337   try {
338       if (mFieldId == 0) {
339           //  If no custom field is assigned, assume the whole resource is a TextView
340           text = (TextView) view;
341        } else {
342           //  Otherwise, find the TextView field within the layout
343                text = (TextView) view.findViewById(mFieldId);
344        }
345    } catch (ClassCastException e) {
346       Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");
347            throw new IllegalStateException(
348                    "ArrayAdapter requires the resource ID to be a TextView", e);
349    }
在代码段中,您可以注意到,如果mFiledId为0(默认值),系统是如何将TextView转换为膨胀视图的。如果你想使用你的布局,你还必须提供这个mFieldId,以及下面的构造函数

 ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
            getActivity(),R.layout.activity_list_item, R.id.text_view_id_list_item, mCrimes);
ArrayAdapter适配器=新的ArrayAdapter(
getActivity(),R.layout.activity\u list\u item,R.id.text\u view\u id\u list\u item,mCrimes);

看看这是否对您有帮助。正如logcat所说,存在classcastexception
ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
            getActivity(),android.R.layout.activity_list_item, mCrimes);
ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
                getActivity(),android.R.layout.simple_list_item_1, mCrimes);
331  if (convertView == null) {
332      view = mInflater.inflate(resource, parent, false);
333   } else {
334      view = convertView;
335   }
336
337   try {
338       if (mFieldId == 0) {
339           //  If no custom field is assigned, assume the whole resource is a TextView
340           text = (TextView) view;
341        } else {
342           //  Otherwise, find the TextView field within the layout
343                text = (TextView) view.findViewById(mFieldId);
344        }
345    } catch (ClassCastException e) {
346       Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");
347            throw new IllegalStateException(
348                    "ArrayAdapter requires the resource ID to be a TextView", e);
349    }
 ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(
            getActivity(),R.layout.activity_list_item, R.id.text_view_id_list_item, mCrimes);