Я пытаюсь использовать arrayAdapter за пределами моей основной деятельности в классе Client(). Я понимаю, что конструктором для arrayAdapter является ArrayAdapter (context, layout_id, textview_id, items), поэтому я прошел в контексте из mainActivity в конструктор для моего класса Client. Для layout_id я понимаю, что он должен быть TextView идентификатор, так что я прошел произвольный TextView из mainActivity в конструктор ArrayAdapter затем попытался обновить пользовательский интерфейс с помощью обработчика, как это:Использование arrayAdapter за пределами MainActivity
adapter = new ArrayAdapter<String>(context, textView.getId(), clients);
mHandler.post(new Runnable() {
@Override
public void run() {
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
я получаю следующее сообщение об ошибке скорее всего, как я прошел идентификатор textView.
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
?
EDIT: Дополнительные информации: у меня TextView в моем activity_main так:
<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" />
Я получаю TextView в моем MainActivity.java так:
TextView tv = (TextView) findViewById(R.id.textView);
Затем проденьте в мой клиентский класс следующим образом:
cThread = new Client(ip, port, context, activity, mHandler, listView, tv);
Это не элемент ID изнутри зрения. Это идентификатор макета файла макета, который будет представлять каждую строку. – DeeV
Опубликовать больше кода. Вы используете перегруженный метод - и вы думаете, что передаете объект, но он считает, что это ссылочный ID – Jim
. Я не думаю, что есть хорошее и безопасное решение для заполнения списка за пределами активности, потому что это не очень хорошо практика. Можете ли вы сделать то, что вам нужно сделать в вашем клиенте, а затем вернуться к своей деятельности с помощью списка ваших товаров с помощью обратного вызова? –