您必须提供一个资源ID为一个TextView android的错误 [英] You must supply a resource ID for a TextView android error

查看:212
本文介绍了您必须提供一个资源ID为一个TextView android的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试试这个一整天都解决此错误。我不明白为什么我的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):你必须
提供一个资源ID为一个TextView
05-06 21:45:59.839:
DEBUG / AndroidRuntime(9023):关闭
下VM 05-06 21:45:59.839:
WARN / dalvikvm(9023):主题ID = 3:
螺纹与未捕获的异常退出
(组= 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):在
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):在
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):在
android.view.View.layout(View.java:6133)
05-06 21:45:59.879:
ERROR / AndroidRuntime(9023):在
android.widget.FrameLayout.onLayout(FrameLayout.java:333)
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):在
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):在
android.view.View.layout(View.java:6133)
05-06 21:45:59.879:
ERROR / AndroidRuntime(9023):在
android.widget.FrameLayout.onLayout(FrameLayout.java:333)
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):在
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(母语
法)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):在
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):在
dalvik.system.NativeStart.main(母语
法)05-06 21:45:59.879:
ERROR / AndroidRuntime(9023):产生的原因:
java.lang.ClassCastException:
android.widget.LinearLayout 05-06
21:45:59.879:
ERROR / AndroidRuntime(9023):在
android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340)
05-06 21:45:59.879:
ERROR / AndroidRuntime(9023):... 30
更多

我的Java文件:

 包fshizzle.com;

进口的java.util.ArrayList;

进口android.app.ListActivity;
进口android.app.NotificationManager;
进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.Intent;
进口android.content.IntentFilter;
进口android.database.Cursor;
进口android.database.sqlite.SQLiteDatabase;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.ContextMenu;
进口android.view.MenuInflater;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.AdapterView.AdapterContextMenuInfo;
进口android.widget.ArrayAdapter;
进口android.widget.ListAdapter;
进口android.widget.ListView;
进口android.widget.TextView;
进口cz.jabbim.android.data.JabberoidDbConnector;
进口fshizzle.com.R;

公共类ConversationList扩展ListActivity {

//私有静态最后字符串变量=ConversationList.class;
    私有静态最终诠释RESULT_CHAT = 4004;
    私有静态最终诠释RESULT_DIRECTCHAT = 4005;

    私有静态最后字符串变量=ConversationList;

    私人的ArrayList<字符串> chatList =新的ArrayList<字符串>();

    私人TextView的电视;

    私人字符串lastJid;
    BroadcastReceiver的企业社会责任;
    IntentFilter的F;

    布尔秀= TRUE;

    @覆盖
    公共无效的onCreate(包冰柱){
        super.onCreate(冰柱);

        的setContentView(R.layout.conversationlist);

        电视=(TextView中)findViewById(R.id.contactList_NoConversation);

        CSR =新的BroadcastReceiver(){
            @覆盖
            公共无效的onReceive(上下文的背景下,意图意图){
                getChats();
                updateList(假);
            }
        };
        F =新的IntentFilter();
        f.addAction(cz.jabbim.android.androidim.NEW_MESSAGE);

        registerForContextMenu(getListView());

    }

    @覆盖
    公共无效的OnStart(){
        super.onStart();
        getChats();
        updateList(显示);
        秀= TRUE;
        如果(getIntent()。getBooleanExtra(为startChat,FALSE)){
            为startChat(getIntent()getStringExtra(JID));
            秀= FALSE;
        }

    }

    @覆盖
    公共无效onResume(){
        super.onResume();
        cancelNotification();

        registerReceiver(CSR,F);
    }

    @覆盖
    公共无效的onPause(){
        super.onPause();
        unregisterReceiver(CSR);

    }

    @覆盖
    公共无效的onStop(){
        super.onStop();

    }

    @覆盖
    保护无效onListItemClick(ListView的LV,视图V,INT POS,长I​​D){
        super.onListItemClick(LV,V,POS机,ID);
        为startChat(POS);
    }

    @覆盖
    公共无效onCreateContextMenu(文本菜单菜单,视图V,ContextMenu.ContextMenuInfo menuInfo){
        新MenuInflater(getApplication())膨胀(R.menu.conversationlist_context,菜单)。
        AdapterContextMenuInfo ACMI =(AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle(聊天+ getJid(acmi.position));

        super.onCreateContextMenu(菜单,V,menuInfo);
    }

    @覆盖
    公共布尔onContextItemSelected(菜单项项){
        AdapterContextMenuInfo ACMI =(AdapterContextMenuInfo)item.getMenuInfo();
        开关(item.getItemId()){
        案例R.id.menuEnter:
            为startChat(acmi.position);
            返回true;
        案例R.id.menuCloseChat:
            closeChat(acmi.position);
            返回true;
        }


        返回super.onContextItemSelected(项目);
    }

    私人诠释getChats(){
        最终的String [] returnColumns = {
                Constants.TABLE_CONVERSATION_FIELD_ID,
                Constants.TABLE_CONVERSATION_FIELD_CHAT,
                MIN(+(Constants.TABLE_CONVERSATION_FIELD_DATE)+),为'firstReceived',
               };

        SQLiteDatabase DB =新JabberoidDbConnector(本).getWritableDatabase();

        游标结果= db.query(Constants.TABLE_CONVERSATION,
                returnColumns,
                空,//Constants.TABLE_CONVERSATION_FIELD_FROM +!='我',
                空值,
                Constants.TABLE_CONVERSATION_FIELD_CHAT,
                空值,
                firstReceived ASC);

        诠释计数= result.getCount();

        chatList.clear();
        result.moveToFirst();
        而(!result.isAfterLast()){
            chatList.add(result.getString(result.getColumnIndex(Constants.TABLE_CONVERSATION_FIELD_CHAT)));
            //chatList.add("rafa@localhost.localdomain);
            result.moveToNext();
        }

        result.close();
        结果= NULL;
        db.close();

        返回计数;
    }



        私人无效updateList(布尔为startChat){
        如果(chatList.size()大于0){

            如果(chatList.size()== 1&安培;&安培;为startChat){
                为startChat(0);
            }
            Log.e(TAG,我们有聊天......);
            tv.setVisibility(View.GONE);
            。getListView()setVisibility(View.VISIBLE);





            ListAdapter适配器=新的ArrayAdapter<字符串>(
                    本,
                    R.layout.conversation_item,
                    chatList
                );
            getListView()setAdapter(适配器)。

            //startChat("rafa@localhost.localdomain);

        //为startChat(getIntent()getStringExtra(FROMUSER));

        } 其他 {
            Log.e(TAG,我们没有聊天......);
            。getListView()setVisibility(View.GONE);
            tv.setVisibility(View.VISIBLE);
            tv.setText(R.string.conversationList_noOpenConversation);
        }

        //使用后关闭数据库
        Log.e(TAG,UpdateList结束......);
    }

    @覆盖
    公共无效onActivityResult(INT申请code,INT结果code,意图数据){
        如果(要求code == RESULT_CHAT){

            诠释聊天= getChats();

            如果(聊天== 0){
                完();
            }否则,如果(聊天== 1){
                字符串JID;

                JID = getJid(0);

                如果(lastJid.equals(JID)){
                    完();
                } 其他 {
                    秀= FALSE;
                }
            } 其他 {
                秀= FALSE;
            }

        }否则,如果(要求code == RESULT_DIRECTCHAT){
            完();
        }
    }

    私人无效cancelNotification(){
        NotificationManager纳米=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        nm.cancel(Constants.NEW_MESSAGE_NOTIFICATION);
    }

    私人无效为startChat(INT POS){
        字符串JID = getJid(POS);
        lastJid = JID;
        finishActivity(RESULT_CHAT);
        意图I =新的意图(这一点,Conversations.class);
        i.putExtra(JID,JID);
        startActivityForResult(ⅰ,RESULT_CHAT);
        的setResult(RESULT_OK);
        完();
    }

    私人无效为startChat(字符串JID){
        finishActivity(RESULT_DIRECTCHAT);
        意图I =新的意图(这一点,Conversations.class);
        i.putExtra(JID,JID);
        startActivityForResult(ⅰ,RESULT_DIRECTCHAT);
        的setResult(RESULT_OK);
        完();
    }

    私人无效closeChat(INT POS){
        SQLiteDatabase DB =新JabberoidDbConnector(本).getWritableDatabase();
        db.delete(Constants.TABLE_CONVERSATION,
                Constants.TABLE_CONVERSATION_FIELD_CHAT +=+ getJid(POS)+',
                空值);
        db.close();
        getChats();
        updateList(假);

    }

    私人字符串getJid(INT POS){
        返回chatList.get(POS);
    }

//私人无效handleUpdateList(){

//}

}
`
 

该错误是在这里:

  ListAdapter适配器=新的ArrayAdapter<字符串>(
        本,
        R.layout.conversation_item,
        chatList
);
getListView()setAdapter(适配器)。
 

没有错误,当我将其删除。

  ListAdapter适配器=新的ArrayAdapter<字符串>(
        本,
        R.layout.conversation_item,
        chatList
);
getListView()setAdapter(适配器)。
 

有什么解决办法吗?

conversation_item.xml

 < XML版本=1.0编码=UTF-8&GT?;
 <的LinearLayout
      机器人:layout_width =FILL_PARENT
      机器人:layout_height =FILL_PARENT
      的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android

      机器人:ID =@ + ID / conversation_item>

          <的TextView
              机器人:layout_height =WRAP_CONTENT
              机器人:ID =@ + ID / conversation_item_name
              机器人:文本=名称姓氏
              机器人:文字颜色=#FFFFFF
              机器人:TEXTSTYLE =黑体
              机器人:TEXTSIZE =16dip
              机器人:layout_width =FILL_PARENT
              机器人:layout_marginTop =10dip
              机器人:layout_marginBottom =10dip
              机器人:layout_marginLeft =10dip>
          < / TextView的>
          <的TextView
              机器人:layout_height =WRAP_CONTENT
              机器人:ID =@ + ID / conversation_item_date
              机器人:layout_width =FILL_PARENT
              机器人:文本=2010年6月17日15:30>
          < / TextView的>
          <的TextView
              机器人:layout_height =WRAP_CONTENT
              机器人:layout_width =FILL_PARENT
              机器人:ID =@ + ID / conversation_item_message
              机器人:文本=只是一些消息......
              机器人:文字颜色=#FFFFFF>
          < / TextView的>
< / LinearLayout中>
 

解决方案

我是pretty的确定问题出在你的 conversation_item 的布局。该文档状态,你必须提供资源以的TextView 。这是什么布局会是什么样子?

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

 < XML版本=1.0编码=UTF-8&GT?;
< TextView中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@机器人:ID / text1中
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:textAppearance =机器人:ATTR / textAppearanceLarge
    机器人:重力=center_vertical
    机器人:以下属性来=6dip
    机器人:=了minHeight机器人:ATTR /列表preferredItemHeight
/>
 

编辑:

我刚才编辑的问题,使您的布局将显示。您的布局确实是错误的,如果你使用的构造函数,你不能有线性布局存在。您可以使用其他的构造函数( ArrayAdapter(上下文的背景下,INT资源,INT textViewResourceId,T []对象)),并提供您的自定义布局和您的TextView的ID。

I try all this day to resolve this error. I don't understand why my logcat prints:

05-06 21:45:59.559:
ERROR/ConversationList(9023): We have
chats... 05-06 21:45:59.609:
ERROR/ConversationList(9023):
UpdateList end... 05-06 21:45:59.839:
ERROR/ArrayAdapter(9023): You must
supply a resource ID for a TextView
05-06 21:45:59.839:
DEBUG/AndroidRuntime(9023): Shutting
down VM 05-06 21:45:59.839:
WARN/dalvikvm(9023): threadid=3:
thread exiting with uncaught exception
(group=0x4000fe70) 05-06 21:45:59.839:
ERROR/AndroidRuntime(9023): Uncaught
handler: thread main exiting due to
uncaught exception 05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):
java.lang.IllegalStateException:
ArrayAdapter requires the resource ID
to be a 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):     at
android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.AbsListView.obtainView(AbsListView.java:1269)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.ListView.makeAndAddView(ListView.java:1623)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.ListView.fillDown(ListView.java:607)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.ListView.fillFromTop(ListView.java:664)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.ListView.layoutChildren(ListView.java:1481)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
android.widget.AbsListView.onLayout(AbsListView.java:1113)
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):     at
android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
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):     at
android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
05-06 21:45:59.879:
ERROR/AndroidRuntime(9023):     at
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.view.ViewRoot.performTraversals(ViewRoot.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:
ERROR/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:
ERROR/AndroidRuntime(9023):     at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
05-06 21:45:59.879:
ERROR/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:
ERROR/AndroidRuntime(9023): Caused by:
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
more

My Java file:

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() {

//  }

}
`

The error is here:

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

No error when I remove it.

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

What is the solution please?

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>

解决方案

I'm pretty sure the problem lies in your conversation_item layout. The docs state that you must provide a resource with a single TextView. What does that layout look like?

As an example, this is what the simple_list_item_1 layout looks like, yours should be pretty similar.

<?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:

I just edited the question so your layout will show. Your layout is indeed wrong, you cannot have the linear layout there if you're using that constructor. You can use the other constructor ( ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) ) and provide your custom layout and your TextView's id.

这篇关于您必须提供一个资源ID为一个TextView android的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆