Как изменить ресурс ImageView в пользовательском макете ListActivity? - PullRequest
1 голос
/ 08 декабря 2011

В моем приложении у меня есть ListActivity и собственный макет для него. В пользовательском макете у меня есть ImageView и TextView.

Я хочу иметь возможность изменять ресурс ImageView на основе некоторого условного кода в моем приложении. Однако, когда я пытаюсь image.setImageResource(resource);, я получаю исключение javaNullPointerException. Я попытался разместить фрагмент кода в разных местах, например, после адаптера. У кого-нибудь есть какие-либо идеи? Заранее спасибо.

Кроме того, я объявил вид изображения перед тем, как обратиться к нему с помощью ImageView image = (ImageView) findViewById(R.id.image);

EDIT:

В моей деятельности:

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, DlistArray));

    // Here I want to change the image
  ImageView celebIcon = (ImageView) findViewById(R.id.icon);
  celebIcon.setImageResource(R.drawable.phil);

  ListView celebList = getListView();
  registerForContextMenu(getListView());
  celebList.setTextFilterEnabled(true);

В моем макете:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:cacheColorHint="#00000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginLeft="10dp"
    android:padding="10dp"
    android:src="@drawable/alan" />

<TextView
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:layout_gravity="center_vertical"
    android:text="@+id/label"
    android:textColor="#ffffff"
    android:textSize="20dp" />
    </LinearLayout>

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Используйте настроенный адаптер:

setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, R.id.label, yourItems){
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    if( convertView == null ){
                        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        convertView = inflater.inflate(R.layout.list_item, null);
                    }

                    ImageView image = (ImageView) findViewById(R.id.icon);
                    image.setImageResource(R.drawable.phil);
                    return convertView;
                }
            });

(Вы также можете просто создать свой собственный расширяющий массив массив-адаптер, если хотите использовать его повторно)

Чтобы установить текстовое представление, просто добавьте код для этого в методе getView (), так же как и код настройки изображения.

0 голосов
/ 08 декабря 2011

В вашем случае, я думаю, вам нужно написать собственный адаптер ( посмотрите здесь ).

Код:

(ImageView) findViewById(R.id.icon);

ищет ImageView в вашем основном макете, поэтому не находит его.

...