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