이 내 처음 사용 ListFragments 나는 오류로 실행 해요된다. 제 질문은이 코드 줄에 빨간색 선이 표시되는 이유입니다.안드로이드 ListFragment 오류는
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, model.getIncidents()));
는 The constructor ArrayAdapter<String>(Activity, int, ArrayList<Incident>) is undefined
편집
내가 더 이상이 조각에 대해 위의 오류가 없다고 말합니다. 코드를 약간 변경했는데 이제 다음과 같이 보입니다.
public class Incidents_Frag extends ListFragment {
View view;
public static Model model;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.incid, container, false);
model = new Model();
setListAdapter(new ArrayAdapter<Incident>(getActivity(),
android.R.layout.simple_list_item_1, model.getIncidents()));
return view;
}
}
그러나 이제 런타임 오류가 발생합니다. logcat은 다음과 같습니다
04-21 18:47:40.934: E/AndroidRuntime(806): FATAL EXCEPTION: main
04-21 18:47:40.934: E/AndroidRuntime(806): java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.ListFragment.ensureList(ListFragment.java:402)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.ListFragment.onViewCreated(ListFragment.java:203)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:809)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:998)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.BackStackRecord.run(BackStackRecord.java:622)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1330)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:417)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.os.Handler.handleCallback(Handler.java:605)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.os.Handler.dispatchMessage(Handler.java:92)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.os.Looper.loop(Looper.java:137)
04-21 18:47:40.934: E/AndroidRuntime(806): at android.app.ActivityThread.main(ActivityThread.java:4340)
04-21 18:47:40.934: E/AndroidRuntime(806): at java.lang.reflect.Method.invokeNative(Native Method)
04-21 18:47:40.934: E/AndroidRuntime(806): at java.lang.reflect.Method.invoke(Method.java:511)
04-21 18:47:40.934: E/AndroidRuntime(806): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-21 18:47:40.934: E/AndroidRuntime(806): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-21 18:47:40.934: E/AndroidRuntime(806): at dalvik.system.NativeStart.main(Native Method)
제가 처음으로 이야기 한 내용을 이해할 수는 없습니다. 어느 R.id
파일 이름이 list
으로 표시되지 않습니다. 나는 이제 어딘가에 listview 나 textview를 넣을 필요가 있다고 생각한다. 어떤을위한 덕분에 여기
이
public class Incidents_Frag extends ListFragment {
View view;
public static Model model;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.incid, container, false);
model = new Model();
setListAdapter(new ArrayAdapter<Incident>(getActivity(),
android.R.layout.simple_list_item_1, model.getIncidents()));
return view;
}
public class MyArrayAdapter extends ArrayAdapter<Item> {
ArrayList<Incident> items;
Context context;
public MyArrayAdapter(Context context, int textViewResourceId,
ArrayList<Incident> items) {
super(context, textViewResourceId, items);
this.context = context;
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
ViewHolder holder = new ViewHolder();
Item item = items.get(position);
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(R.layout.list_item, parent, false);
holder.userName = (TextView) row.findViewById(R.id.name);
row.setTag(holder);
}
else
{
holder = (ViewHolder) row.getTag();
}
holder.name.setText(item.getName());
return row;
}
public static class ViewHolder
{
TextView name;
}
public int getCount() {
return items.size();
}
}
}
내가 Item item = items.get(position);
holder.userName = (TextView) row.findViewById(R.id.name);
에서 레드 라인을 얻을 내 조각에 대한 새로운 코드는
편집을 제공 할 수있는 도움 "userName은 (는) "
holder.name.setText(item.getName());
"있어서 getName()가 입력 ClipData.Item "
public static class ViewHolder
"멤버 형 ViewHolder 정적 선언 될 수 없기 정의되지 해결; 정적 유형은 정적 또는 최상위 수준 유형에서만 선언 할 수 있습니다. "
이렇게 빨간색 선을 정리하면 작동하거나 작동하지 않을 수 있습니다.이 경로를 계속 진행하려면이 코드 . 당신은 따라서 그 오류를 "사건"의 배열을 통과 할 수있는 적절한 장소에, 어떤이 기본 생성자는 문자열의 배열을 받아
는'ArrayAdapter'는 형식화 된 클래스입니다. –
@MH 수정 사항을 참조하십시오 – IrishWhiskey
새로운 문제에 대해 : 레이아웃 파일을 변경 한 경우'@ android' 네임 스페이스 내의 ID를 검색하십시오. 특히'@android : id/list'와 같은 이드의 모습을주의 깊게 관찰하십시오. 오류는'ListFragment'가 레이아웃 파일의'ListView '를 식별하는 데 사용하는 ID를 일부보기에 부여했다는 것을 나타냅니다. 'R.layout.incid' (incid.xml)에서 검색을 시작할 것입니다. –