您必须提供TextView android错误的资源ID

我今天尝试解决这个错误。 我不明白为什么我的logcat打印:

 05-06 21:45:59.559:错误/ ConversationList(9023):我们聊天... 05-06 21:45:59.609:ERROR / ConversationList(9023):UpdateList结束... 05-06 21:45: 59.839:ERROR / ArrayAdapter(9023):您必须提供TextView 05-06 21:45:59.839:DEBUG / AndroidRuntime(9023)的资源ID:closuresVM 05-06 21:45:59.839:WARN / dalvikvm 9023):threadid = 3:线程退出,未捕获的exception05-06 21:45:59.839:ERROR / AndroidRuntime(9023):未捕获的处理程序:线程主要由于未捕获的exception退出05-06 21:45: 59.879:错误/ AndroidRuntime(9023):java.lang.IllegalStateException:ArrayAdapter需要资源ID是TextView 05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter .java:347)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)05-06 21:45:59.879:ERROR / AndroidRuntime(9023 ):在android.widget.AbsListView.obtainView(AbsListView.java:1269)05-  06:21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.ListView.makeAndAddView(ListView.java:1623)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget。 ListView.fillDown(ListView.java:607)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.ListView.fillFromTop(ListView.java:664)05-06 21:45:59.879:在Android.widget.AbsListView.onLayout(AbsListView.java)错误/ AndroidRuntime(9023):在android.widget.ListView.layoutChildren(ListView.java:1481)05-06 21:45:59.879:错误/ AndroidRuntime :1113)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.view.View.layout(View.java:6133)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)05-06 21 :45:59.879:错误/ AndroidRuntime(9023):在android.widget.LinearLayout.onLayout(LinearLayout.java:918)05-06 21:45:59.879:错误/ A  ndroidRuntime(9023):在android.view.View.layout(View.java:6133)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.FrameLayout.onLayout(FrameLayout.java:333 )05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.view.View.layout(View.java:6133)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android .widget.LinearLayout.setChildFrame(LinearLayout.java:1119)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)05-06 21:45 :59.879:错误/ AndroidRuntime(9023):在android.widget.LinearLayout.onLayout(LinearLayout.java:918)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.view.View.layout View.java:6133)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.FrameLayout.onLayout(FrameLayout.java:333)05-06 21:45:59.879:错误/ AndroidRuntime 9023):在android.view.View.layout(View.java:6133)05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.view.ViewRoot.performTraversals(ViewR  oot.java:929)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)05-06 21:45:59.879:ERROR / AndroidRuntime 9023):at android.os.Handler.dispatchMessage(Handler.java:99)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at android.os.Looper.loop(Looper.java:123)05 -06 21:45:59.879:错误/ AndroidRuntime(9023):at android.app.ActivityThread.main(ActivityThread.java:3948)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at java.lang .reflect.Method.invokeNative(Native Method)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at java.lang.reflect.Method.invoke(Method.java:521)05-06 21:45: 59.879:错误/ AndroidRuntime(9023):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:782)05-06 21:45:59.879:错误/ AndroidRuntime(9023):at com.android .internal.os.ZygoteInit.main(ZygoteInit.java:540)05-06 21:45:59.879:ERROR / AndroidRuntime(9023):at dalvik.system.NativeStart.main(Native Method)05-06 21:45: 59.879:错误/ Androi  dRuntime(9023):导致:java.lang.ClassCastException:android.widget.LinearLayout 05-06 21:45:59.879:错误/ AndroidRuntime(9023):在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340) 05-06 21:45:59.879:错误/ AndroidRuntime(9023):... 30多 

我的Java文件:

package fshizzle.com; import java.util.ArrayList; import android.app.ListActivity; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import cz.jabbim.android.data.JabberoidDbConnector; import fshizzle.com.R; public class ConversationList extends ListActivity { // private static final String TAG = "ConversationList.class"; private static final int RESULT_CHAT = 4004; private static final int RESULT_DIRECTCHAT = 4005; private static final String TAG = "ConversationList"; private ArrayList<String> chatList = new ArrayList<String>(); private TextView tv; private String lastJid; BroadcastReceiver csr; IntentFilter f; boolean show = true; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.conversationlist); tv = (TextView)findViewById(R.id.contactList_NoConversation); csr = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { getChats(); updateList(false); } }; f = new IntentFilter(); f.addAction("cz.jabbim.android.androidim.NEW_MESSAGE"); registerForContextMenu(getListView()); } @Override public void onStart() { super.onStart(); getChats(); updateList(show); show = true; if(getIntent().getBooleanExtra("startChat", false)) { startChat(getIntent().getStringExtra("jid")); show = false; } } @Override public void onResume() { super.onResume(); cancelNotification(); registerReceiver(csr, f); } @Override public void onPause() { super.onPause(); unregisterReceiver(csr); } @Override public void onStop() { super.onStop(); } @Override protected void onListItemClick(ListView lv, View v, int pos, long id) { super.onListItemClick(lv, v, pos, id); startChat(pos); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { new MenuInflater(getApplication()).inflate(R.menu.conversationlist_context, menu); AdapterContextMenuInfo acmi = (AdapterContextMenuInfo)menuInfo; menu.setHeaderTitle("Chat with " + getJid(acmi.position)); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo(); switch(item.getItemId()) { case R.id.menuEnter: startChat(acmi.position); return true; case R.id.menuCloseChat: closeChat(acmi.position); return true; } return super.onContextItemSelected(item); } private int getChats() { final String[] returnColumns = { Constants.TABLE_CONVERSATION_FIELD_ID, Constants.TABLE_CONVERSATION_FIELD_CHAT, "MIN("+(Constants.TABLE_CONVERSATION_FIELD_DATE)+") as 'firstReceived'", }; SQLiteDatabase db = new JabberoidDbConnector(this).getWritableDatabase(); Cursor result = db.query(Constants.TABLE_CONVERSATION, returnColumns, null, //Constants.TABLE_CONVERSATION_FIELD_FROM + "!= 'me'", null, Constants.TABLE_CONVERSATION_FIELD_CHAT, null, "firstReceived ASC" ); int count = result.getCount(); chatList.clear(); result.moveToFirst(); while(!result.isAfterLast()) { chatList.add(result.getString(result.getColumnIndex(Constants.TABLE_CONVERSATION_FIELD_CHAT))); //chatList.add("rafa@localhost.localdomain"); result.moveToNext(); } result.close(); result = null; db.close(); return count; } private void updateList(boolean startChat) { if(chatList.size() > 0) { if(chatList.size()==1 && startChat) { startChat(0); } Log.e(TAG, "We have chats..."); tv.setVisibility(View.GONE); getListView().setVisibility(View.VISIBLE); ListAdapter adapter = new ArrayAdapter<String>( this, R.layout.conversation_item, chatList ); getListView().setAdapter(adapter); //startChat("rafa@localhost.localdomain"); // startChat(getIntent().getStringExtra("fromUser")); } else { Log.e(TAG, "We don't have chats..."); getListView().setVisibility(View.GONE); tv.setVisibility(View.VISIBLE); tv.setText(R.string.conversationList_noOpenConversation); } // close the database after usage Log.e(TAG, "UpdateList end..."); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==RESULT_CHAT) { int chats = getChats(); if(chats==0) { finish(); } else if(chats==1) { String jid; jid = getJid(0); if(lastJid.equals(jid)) { finish(); } else { show = false; } } else { show = false; } } else if (requestCode==RESULT_DIRECTCHAT) { finish(); } } private void cancelNotification() { NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); nm.cancel(Constants.NEW_MESSAGE_NOTIFICATION); } private void startChat(int pos) { String jid = getJid(pos); lastJid = jid; finishActivity(RESULT_CHAT); Intent i = new Intent(this, Conversations.class); i.putExtra("jid", jid); startActivityForResult(i, RESULT_CHAT); setResult(RESULT_OK); finish(); } private void startChat(String jid) { finishActivity(RESULT_DIRECTCHAT); Intent i = new Intent(this, Conversations.class); i.putExtra("jid", jid); startActivityForResult(i, RESULT_DIRECTCHAT); setResult(RESULT_OK); finish(); } private void closeChat(int pos) { SQLiteDatabase db = new JabberoidDbConnector(this).getWritableDatabase(); db.delete(Constants.TABLE_CONVERSATION, Constants.TABLE_CONVERSATION_FIELD_CHAT + " = '" + getJid(pos) + "'", null); db.close(); getChats(); updateList(false); } private String getJid(int pos) { return chatList.get(pos); } // private void handleUpdateList() { // } } ` 

错误在这里:

 ListAdapter adapter = new ArrayAdapter<String>( this, R.layout.conversation_item, chatList ); getListView().setAdapter(adapter); 

当我删除它没有错误。

 ListAdapter adapter = new ArrayAdapter<String>( this, R.layout.conversation_item, chatList ); getListView().setAdapter(adapter); 

请问有什么解决办法?

conversation_item.xml

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/conversation_item"> <TextView android:layout_height="wrap_content" android:id="@+id/conversation_item_name" android:text="Name Surname" android:textColor="#ffffff" android:textStyle="bold" android:textSize="16dip" android:layout_width="fill_parent" android:layout_marginTop="10dip" android:layout_marginBottom="10dip" android:layout_marginLeft="10dip"> </TextView> <TextView android:layout_height="wrap_content" android:id="@+id/conversation_item_date" android:layout_width="fill_parent" android:text="17.6.2010 15:30"> </TextView> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/conversation_item_message" android:text="Just some message..." android:textColor="#ffffff"> </TextView> </LinearLayout> 

Solutions Collecting From Web of "您必须提供TextView android错误的资源ID"

我很确定问题在于您的conversation_item布局。 该文档声明,您必须提供一个单一的 TextView的资源。 那布局是什么样的?

作为一个例子,这就是simple_list_item_1布局的样子,你的应该是非常相似的。

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" android:paddingLeft="6dip" android:minHeight="?android:attr/listPreferredItemHeight" /> 

编辑:

我只是编辑了这个问题,所以你的布局将显示。 你的布局确实是错误的,如果你正在使用这个构造函数,那么你不能有线性布局。 你可以使用其他的构造函数( ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) )并提供你的自定义布局和你的TextView的id。

有同样的问题,需要改变自定义适配器:

  ListAdapter adapter = new ArrayAdapter<String>( this, R.layout.conversation_item, chatList ); getListView().setAdapter(adapter); 

至:

  ListAdapter adapter = new ArrayAdapter<String>( this, R.layout.conversation_item, R.id.sometextview_from_the_layout, chatList ); getListView().setAdapter(adapter); 

我认为所选的TextView将用于生成rowid,这可能解释它需要是唯一的,但我还不确定。

每当需要在自定义布局视图中列出arrays对象时,最好使用自定义适配器。 引用这个简单而美丽的参考用自定义适配器填充列表视图

您正在使用的构造函数严格来说是一个CheckedTextView。 这个问题是由于你在你的xml文件中提供了一个线性布局。 最简单的解决scheme是删除线性布局,只保留CheckedTextView。 干杯!