我一直在尝试在名为Client()的类中使用我的主要活动之外的arrayAdapter。我意识到arrayAdapter的构造函数是ArrayAdapter(context,layout_id,textview_id,items),所以我已经从mainActivity传递到我的Client类的构造函数中。对于layout_id我明白它必须是一个textView id,所以我将一个任意textview从mainActivity传递到ArrayAdapter构造函数,然后尝试通过这样的处理程序更新UI:
adapter = new ArrayAdapter<String>(context, textView.getId(), clients);
mHandler.post(new Runnable() {
@Override
public void run() {
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
我最有可能收到以下错误,我已经通过了textView Id。
1340-1340/package E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: Resource ID #0x7f080040 type #0x12 is not valid
我知道如果我从一个活动中做到这一点我可以像这样传递它:
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, fileNames);
listView.setAdapter(adapter);
但我如何在Activity
之外执行此操作?
编辑:额外信息: 我在我的activity_main里面有我的textView,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#000000"
android:dividerHeight="5dp"
android:paddingLeft="1dp"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="80dp"
android:text="New Text"
android:id="@+id/textView"
android:layout_alignTop="@+id/listview"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
我在MainActivity.java中得到了textView,如下所示:
TextView tv = (TextView) findViewById(R.id.textView);
然后将它传递到我的客户端类中:
cThread = new Client(ip, port, context, activity, mHandler, listView, tv);
答案 0 :(得分:1)
在你的问题中,你引用了一个构造函数: ArrayAdapter(Context context,int resource,int textViewResourceId,List objects)
但在您的代码中,您正在使用另一个 ArrayAdapter(Context context,int resource,T [] objects)
您正在使用的那个期望布局资源ID而不是视图ID。
!!小心,我不知道你的意思是什么&#34;任意的textview id&#34;但是textview必须存在于用于实例化arrayAdpater的布局中。
答案 1 :(得分:0)
您只需在代码的第一行中将<{1}} 替换为 textView.getId()