Vous devez fournir un ID de ressource pour un TextView android erreur
J'ai essayer tous ce jour-là pour résoudre cette erreur. Je ne comprends pas pourquoi mon logcat imprime:
05-06 21:45:59.559: ERREUR/ConversationList(9023): Nous avons chats... 05-06 21:45:59.609: ERREUR/ConversationList(9023): UpdateList fin... 05-06 21:45:59.839: ERREUR/ArrayAdapter(9023): Vous devez fournir un ID de ressource pour un TextView 05-06 21:45:59.839: DEBUG/AndroidRuntime(9023): Fermeture en bas de la VM 05-06 21:45:59.839: ALERTER/dalvikvm(9023): threadid=3: thread sortir avec uncaught exception (groupe=0x4000fe70) 05-06 21:45:59.839: ERREUR/AndroidRuntime(9023): Uncaught gestionnaire: thread principal de la fermeture en raison de exception non interceptée 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): java.lang.IllegalStateException: ArrayAdapter nécessite l'ID de la ressource pour être un TextView 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ArrayAdapter.getView(ArrayAdapter.java:323) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.AbsListView.obtainView(AbsListView.java:1269) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ListView.makeAndAddView(ListView.java:1623) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ListView.fillDown(ListView.java:607) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ListView.fillFromTop(ListView.java:664) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ListView.layoutChildren(ListView.java:1481) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.AbsListView.onLayout(AbsListView.java:1113) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.Vue.mise en page(à Vue.java:6133) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.setChildFrame(LinearLayout.java:1119) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.layoutVertical(LinearLayout.java:998) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.onLayout(LinearLayout.java:918) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.Vue.mise en page(à Vue.java:6133) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.FrameLayout.onLayout(FrameLayout.java:333) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.Vue.mise en page(à Vue.java:6133) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.setChildFrame(LinearLayout.java:1119) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.layoutVertical(LinearLayout.java:998) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.LinearLayout.onLayout(LinearLayout.java:918) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.Vue.mise en page(à Vue.java:6133) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.FrameLayout.onLayout(FrameLayout.java:333) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.Vue.mise en page(à Vue.java:6133) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.ViewRoot.performTraversals(ViewRoot.java:929) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.vue.ViewRoot.handleMessage(ViewRoot.java:1482) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.os.Gestionnaire d'.dispatchMessage(Handler.java:99) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.os.Looper.boucle(Looper.java:123) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.app.ActivityThread.principale(ActivityThread.java:3948) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à java.lang.de réfléchir.La méthode.invokeNative(Native La méthode) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:521) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à com.android.interne.os.ZygoteInit$MethodAndArgsCaller.exécuter(ZygoteInit.java:782) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à com.android.interne.os.ZygoteInit.principale(ZygoteInit.java:540) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à dalvik.système.NativeStart.principale(langue Maternelle La méthode) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): Causé par: java.lang.ClassCastException: android.widget de.LinearLayout 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): à android.widget de.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340) 05-06 21:45:59.879: ERREUR/AndroidRuntime(9023): 30 ... plus
Mon fichier 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("[email protected]");
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("[email protected]");
// 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() {
// }
}
`
L'erreur est ici:
ListAdapter adapter = new ArrayAdapter<String>(
this,
R.layout.conversation_item,
chatList
);
getListView().setAdapter(adapter);
Pas d'erreur lorsque je le supprime.
ListAdapter adapter = new ArrayAdapter<String>(
this,
R.layout.conversation_item,
chatList
);
getListView().setAdapter(adapter);
Quelle est la solution svp?
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>
- Hmm ... C'est intéressant. À partir de l'erreur, il semble que vous devez fournir TextView ID pour ArrayAdapter constructeur mais la documentation dit
textViewResourceId; The resource ID for a layout file containing a TextView to use when instantiating views
. Avez-vous essayé d'utiliser TextView ID à la place?
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que le problème réside dans votre
conversation_item
mise en page. Le docs état que vous devez fournir une ressource avec un unique TextView. Ce n'est que la mise en page?Comme un exemple, c'est ce que le simple_list_item_1 mise en page ressemble à la vôtre devrait être assez similaire.
EDIT:
J'ai juste modifié la question de sorte que votre présentation montrera. Votre mise en page est en effet mal, vous ne pouvez pas avoir le linéaire de la mise en page si vous l'utilisez constructeur. Vous pouvez utiliser les autres constructeur (
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
) et de fournir à votre disposition personnalisée et votre TextView id.Eu le même problème, besoin de changer l'adaptateur personnalisé à partir de:
à:
Je pense sélectionnés
TextView
sera utilisé pour générer le rowid, ce qui peut expliquer son besoin d'être unique, mais je ne suis pas encore sûr.Il est préférable d'utiliser un adaptateur personnalisé chaque fois qu'un Tableau D'Objets doivent être répertoriés dans une Mise en page Personnalisée de Vue. Reportez-vous à cette simple et belle référence
Remplissage d'une Liste grâce à un Adaptateur Personnalisé
Le constructeur que vous utilisez est strictement un CheckedTextView. Le problème se pose en raison de vous en offrant un linéaire de la mise en page dans votre fichier xml. La solution la plus simple est de supprimer le linéaire de la mise en page et de ne garder que les CheckedTextView. Cheers!