[解決済み] TextView android のリソース ID を指定する必要がある。
2022-02-14 08:20:34
質問
今日一日、このエラーを解決しようと努力しています。なぜlogcatが表示されるのか理解できません。
05-06 21:45:59.559: ERROR/ConversationList(9023): 私たちは チャット... 05-06 21:45:59.609: ERROR/ConversationList(9023): UpdateList 終了... 05-06 21:45:59.839: ERROR/ArrayAdapter(9023): を使用する必要があります。 TextViewのリソースIDを指定する 05-06 21:45:59.839: DEBUG/AndroidRuntime(9023): シャットダウン VMを停止する 05-06 21:45:59.839: WARN/dalvikvm(9023): threadid=3: スレッドがキャッチできない例外で終了した (group=0x4000fe70) 05-06 21:45:59.839: ERROR/AndroidRuntime(9023): 捕捉されない ハンドラ: スレッドメインの終了 キャッチできない例外 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): java.lang.IllegalStateException: ArrayAdapter は、リソース ID を必要とします。 はTextViewでなければならない 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 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: ERROR/AndroidRuntime(9023): で。 android.widget.ListView.makeAndAddView(ListView.java:1623) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.ListView.fillDown(ListView.java:607) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.ListView.fillFromTop(ListView.java:664) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.ListView.layoutChildren(ListView.java:1481) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.AbsListView.onLayout(AbsListView.java:1113) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.view.View.layout(View.java:6133) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.LinearLayout.onLayout(LinearLayout.java:918) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.view.View.layout(View.java:6133) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.view.View.layout(View.java:6133) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.widget.LinearLayout.onLayout(LinearLayout.java:918) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.view.View.layout(View.java:6133) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.view.View.layout(View.java:6133) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.view.ViewRoot.performTraversals(ViewRoot.java:929) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.view.ViewRoot.handleMessage(ViewRoot.java:1482) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.os.Handler.dispatchMessage(Handler.java:99) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.os.Looper.loop(Looper.java:123) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 android.app.ActivityThread.main(ActivityThread.java:3948) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 java.lang.reflect.Method.invokeNative(Native メソッド) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 java.lang.reflect.Method.invoke(Method.java:521) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): で。 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at dalvik.system.NativeStart.main(Native) メソッド) 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): によって引き起こされる。 java.lang.ClassCastException が発生しました。 android.widget.LinearLayout 05-06 21:45:59.879: ERROR/AndroidRuntime(9023): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340) 05-06 21:45:59.879: ERROR/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("[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() {
// }
}
`
エラーはこちらです。
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>
解決方法は?
問題はあなたの
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"
/>
EDITです。
質問を編集したので、レイアウトが表示されるようになりました。そのコンストラクタを使用している場合、直線的なレイアウトを持つことはできません。他のコンストラクタ(
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
を指定し、カスタムレイアウトとTextViewのidを指定してください。
関連
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】Android Studio。Android.support.design.widget.FloatingActionButton クラスを膨らませるのにエラーが発生する。
-
[解決済み] Looper.prepare()を呼び出していないスレッドではハンドラを作成できない
-
[解決済み] Androidのテキストビューの周りにボーダーを付けるには?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] AndroidでTextViewをスクロール可能にする
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】AndroidでTextViewのfontFamilyを変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シンボル 'context' を解決できない
-
[解決済み】com.android.ide.common.process.ProcessException: aaptの実行に失敗しました! どうすればいいですか?
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】レンダリングの問題 レンダリング中に発生した例外:com/android/util/PropertiesMap [重複].
-
[解決済み】"ビットマップが大きすぎてテクスチャにアップロードできない"
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] 複数のデバイスを接続しているときにADB Shellを使用するには?error: more than one device and emulator "で失敗します。
-
[解決済み] APKのインストール中にDELETE_FAILED_INTERNAL_ERRORエラーが発生する。