Пользовательский список не отображается

Что я делаю:

Я пишу приложение для Android, которое связано с картами, маршрутами и т. д. На главном экране приложения есть кнопка, которая открывает страницу избранного. Страница избранного состоит из следующего XML-макета.

layout_favorites.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/mainscreen2">
        <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbarSize="0dp"
        >
            <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
                <ImageView
                android:id="@+id/imageViewfavorites"
                android:scaleType="fitEnd"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="3dp"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="3dp"
                android:layout_width="60px"
                android:layout_height="60px"
                android:src="@drawable/android_button_44_2"/>
                <TextView
                android:id="@+id/textview_favorites"
                android:background="@null"
                android:scaleType="fitEnd"
                android:layout_marginTop="15dp"
                android:layout_marginBottom="3dp"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="3dp"
                android:layout_width="wrap_content"
                android:layout_height="60px"
                android:textSize="35sp"
                android:textColor="#000000"
                android:text="Favorites"/>
            </LinearLayout>
        </HorizontalScrollView>
        <ListView
            android:id="@+id/listview_favorites"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginTop="45dp"
            android:cacheColorHint="#00000000"
            >
            </ListView>
</LinearLayout>

Это работает нормально, не беспокойтесь. В верхнем макете вы увидите ListView. Я хочу заполнить этот ListView строками, выглядящими так:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dip" >
        <ImageView
            android:id="@+id/route_image"
            android:layout_width="50dip"
            android:layout_height="50dip"/>
    <TextView
        android:id="@+id/route_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/route_image"
        android:layout_toRightOf="@+id/route_image"
        android:textColor="#000000"
        android:textSize="15dip"
        android:textStyle="bold"/>
    <TextView
        android:id="@+id/route_author"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/route_title"
        android:textColor="#000000"
        android:textSize="10dip"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"/>
    <TextView
        android:id="@+id/route_length"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@id/route_title"
        android:gravity="right"
        android:layout_marginRight="5dip"
        android:textSize="10dip"
        android:textColor="#10bcc9"
        android:textStyle="bold"/>
     <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/arrow"/>
</RelativeLayout>

Итак, в итоге должно получиться что-то вроде этого:

(изображение нарисовано краской :p) http://s9.postimage.org/cgcahc1i7/Untitled.png

OR

http://imageshack.us/photo/my-images/694/67362201.png/

Теперь вот в чем проблема. Он не отображается. Я использую собственный адаптер, который расширяет класс BaseAdapter для обработки Listview и расширения представления и т. д. Я опубликую Adapater, а затем Activity для экрана «Избранное».

Класс адаптера:

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


/**
 *
 * @author Gideon
 */
public class Adapter_Maplist_Page_Favorites extends BaseAdapter
{
    //----------------------------------------
    //  Variables
    //----------------------------------------
        private Context context;
        private final Drawable[] drawables;
        private final String[] titles;
        private final String[] authors;
        private final String[] durations;
    //----------------------------------------

    //----------------------------------------
    //  Methods
    //----------------------------------------


        public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables)
        {

            this.context = context;
            this.titles = titles;
            this.authors = authors;
            this.durations = durations;
            this.drawables = drawables;
        }

        public View getView(int position, View convertView, ViewGroup parent)
        {

                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);


                ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
            TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
            TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
                TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
                ImageView map_image_arrow = (ImageView) rowView.findViewById(R.drawable.arrow);

                map_image.setBackgroundDrawable(drawables[position]);
                map_title.setText(titles[position]);
                map_author.setText(authors[position]);
                map_length.setText(durations[position]);
                map_image_arrow.setBackgroundDrawable(map_image_arrow.getBackground());


        return rowView;
    }
        //----------------------------------------

        //----------------------------------------
        // Not Implemented
        //----------------------------------------
        public Object getItem(int arg0)
        {
            return null;
        }

        public long getItemId(int position)
        {
           return 0;
        }

        public int getCount()
        {
            throw new UnsupportedOperationException("Not supported yet.");
        }
            //----------------------------------------
    //----------------------------------------
}

Избранное Класс активности:

import android.app.ListActivity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;



/**
 *
 * @author Gideon
 */
public class Page_Favorites extends ListActivity
{
    //---------------------------------------------------------------------------------------------------------------
    //Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc. (This info will be loaded from the database in the future)
    //---------------------------------------------------------------------------------------------------------------
    public final String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
    public final String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
    public final String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
    ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
    public final Drawable[] map_images = {iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground()};
    //---------------------------------------------------------------------------------------------------------------

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
        setContentView(R.layout.layout_favorites);
        // ToDo add your GUI initialization code here

        ListView list = (ListView) findViewById(R.id.listview_favorites);
        list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images));

        list.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
               Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

Когда я нажимаю кнопку, чтобы запустить экран/активность избранного и создать список, приложение завершает работу с ошибкой (было вынуждено выйти...). Любая помощь или идеи будут оценены. Спасибо.

ИЗМЕНИТЬ:

Ошибки журнала Adb:

22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  FATAL EXCEPTION: main
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  java.lang.RuntimeException: Unable to start activity ComponentInfo{RedPheasant.LoggerApp/RedPheasant.LoggerApp.Page_Favorites}: java.lang.NullPointerException
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.access$1500(ActivityThread.java:117)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Handler.dispatchMessage(Handler.java:99)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Looper.loop(Looper.java:123)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.main(ActivityThread.java:3687)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invokeNative(Native Method)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invoke(Method.java:507)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at dalvik.system.NativeStart.main(Native Method)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  Caused by: java.lang.NullPointerException
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at RedPheasant.LoggerApp.Page_Favorites.onCreate(Page_Favorites.java:48)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      ... 11 more
22:54:21.515    212 ERROR   #212        Dumpstate > /data/log/dumpstate_app_error

Также исправил эту часть:

public int getCount()
    {
       if(titles == null)
        {
            return 0;
        }
        return titles.length;
    }

все еще получаю ту же проблему. РЕДАКТИРОВАТЬ 2:

Хорошо, ребята, спасибо за всю помощь...

Кроме того, я изменил это:

Новая активность страницы избранного (измененная):

public class Page_Favorites extends Activity
{




    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
        setContentView(R.layout.layout_favorites);
        // ToDo add your GUI initialization code here

        //---------------------------------------------------------------------------------------------------------------
        //Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc.
        //---------------------------------------------------------------------------------------------------------------


        String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
        String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
        String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
        //ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
        Drawable d = getResources().getDrawable(R.drawable.route_image_1);
        Drawable[] map_images = {d,d,d,d,d,d};
        Drawable d2 = getResources().getDrawable(R.drawable.arrow);
       //---------------------------------------------------------------------------------------------------------------

        ListView list = (ListView) findViewById(R.id.listview_favorites);
        list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images,d2));//lika a boss itches

        list.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
               Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

Новый класс адаптера (измененный):

public class Adapter_Maplist_Page_Favorites extends BaseAdapter
{
    //----------------------------------------
    //  Variables
    //----------------------------------------
        private Context context;
        private final Drawable[] drawables;
        private final String[] titles;
        private final String[] authors;
        private final String[] durations;
        private final Drawable d;
    //----------------------------------------

    //----------------------------------------
    //  Methods
    //----------------------------------------


        public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables,Drawable d)
        {

            this.context = context;
            this.titles = titles;
            this.authors = authors;
            this.durations = durations;
            this.drawables = drawables;
            this.d = d;
        }
        //----------------------------------------


        public View getView(int position, View convertView, ViewGroup parent)
        {

                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);


                ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
        TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
        TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
                TextView map_length = (TextView) rowView.findViewById(R.id.route_length);

                ImageView map_image_arrow = (ImageView) rowView.findViewById(R.id.route_arrow);

                map_image.setBackgroundDrawable(drawables[position]);
                map_title.setText(titles[position]);
                map_author.setText(authors[position]);
                map_length.setText(durations[position]);
                map_image_arrow.setBackgroundDrawable(d);


        return rowView;
    }
        //----------------------------------------

        //----------------------------------------
        // Not Implemented
        //----------------------------------------
        public Object getItem(int arg0)
        {
            return null;
        }

        public long getItemId(int position)
        {
           return 0;
        }

        public int getCount()
        {
           if(titles == null)
            {
                return 0;
            }
            return titles.length;
        }
            //----------------------------------------
    //----------------------------------------
}

И новый журнал ошибок adblog:

23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime  FATAL EXCEPTION: main
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime  java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AdapterView.addView(AdapterView.java:461)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:416)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at RedPheasant.LoggerApp.Adapter_Maplist_Page_Favorites.getView(Adapter_Maplist_Page_Favorites.java:73)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AbsListView.obtainView(AbsListView.java:1554)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.makeAndAddView(ListView.java:1793)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.fillDown(ListView.java:718)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.fillFromTop(ListView.java:775)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.layoutChildren(ListView.java:1646)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AbsListView.onLayout(AbsListView.java:1384)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.View.layout(View.java:7228)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.ViewRoot.performTraversals(ViewRoot.java:1147)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Handler.dispatchMessage(Handler.java:99)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Looper.loop(Looper.java:123)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.main(ActivityThread.java:3687)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invokeNative(Native Method)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invoke(Method.java:507)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at dalvik.system.NativeStart.main(Native Method)
23:15:15.849    212 ERROR   #212        Dumpstate > /data/log/dumpstate_app_error

Спасибо за помощь до сих пор ... все еще получаю ту же ошибку.

Обновление:

Я предполагаю, что это моя основная проблема прямо сейчас:

java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

Я предполагаю, что это как-то связано с адаптером, который не поддерживает представление. Я несколько смущен: p lol. Есть идеи.

ПОСЛЕДНИЕ РЕДАКТИРОВАНИЯ — РЕШЕНО Спасибо за помощь, ребята. Наконец-то он работает и выглядит великолепно.

Основные проблемы заключались в том, что способ, которым я назначал чертежи для ImageViews, вызывал проблемы при выполнении раздувания. Спасибо, Сэм, за указание на это. Еще одна серьезная проблема заключалась в том, что мне пришлось добавить параметр false в метод inflate, чтобы не копировать его в корень. Спасибо, Анджело, за указание на это.


person Janpan    schedule 11.07.2012    source источник
comment
Если приложение завершает работу с ошибкой, опубликуйте свой LogCat.   -  person Sam    schedule 12.07.2012
comment
at RedPheasant.LoggerApp.Page_Favorites.onCreate(Page_Favorites.java:48) Сообщает нам об исключении нулевого указателя в строке 48, которая находится в Page_Favorites.onCreate(). Что такое строка 48?   -  person Sam    schedule 12.07.2012
comment
строка 48: Drawable[] map_images = {iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground()}; Думаю, мне стоит посмотреть на это...   -  person Janpan    schedule 12.07.2012
comment
Вы не можете загрузить drawable следующим образом: findViewById(R.drawable.route_image_1); что делает iv нулевым. Я обновлю свой ответ решением этой проблемы.   -  person Sam    schedule 12.07.2012
comment
Спасибо ! Я проверю решение. Я изменил его, теперь я больше не получаю исключение нулевого указателя, а что-то еще. Скоро опубликую обновление. Спасибо.   -  person Janpan    schedule 12.07.2012


Ответы (4)


Без LogCat мы можем только догадываться, какие у вас ошибки...

1) Вы расширяете ListActivity:

public class Page_Favorites extends ListActivity

Для этого требуется наличие ListView с атрибутом android:id="@android:id/list" в макете, который вы передаете в setContentView(). Я просто рекомендую вам расширять Activity:

public class Page_Favorites extends Activity

поскольку ваш текущий код не зависит от ListActivity.

2) Вне контекста:

ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
public final Drawable[] map_images = {iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground()};

Вы не можете ссылаться на findViewById() до того, как создали действие, это должно быть сделано в onCreate() после setContentView().

3) Вы должны загрузить рисуемый объект в ImageView следующим образом:

ImageView iv = (ImageView) findViewById(R.id.imageViewfavorites);
iv.setImageResource(R.drawables.route_image_1);

Я догадался, где вы хотели изображение... Это то, что вы хотели сделать?

И уже достаточно людей прокомментировали getCount(), так что я не буду повторяться.

4) В getView() вашего адаптера измените это:

View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);

к этому:

View rowView = inflater.inflate(R.layout.layout_favorites_row, parent, false);
person Sam    schedule 11.07.2012
comment
Спасибо за ответ. Я изменил расширение на Activity. Все еще получаю ту же проблему. - person Janpan; 12.07.2012
comment
Скопируйте и вставьте свои ошибки LogCat в вопрос. В Eclipse Окно -> Показать представление -> LogCat - person Sam; 12.07.2012
comment
Также изменено объявление ImageView после метода onCreate .. после setContentView(). Все еще получаю ту же проблему. спасибо за помощь до сих пор! - person Janpan; 12.07.2012
comment
@Janpan Я считаю, что ошибка теперь в другой строке, если вы внесли эти изменения. Можете ли вы указать нам новую строку ошибки? - person Angelo; 12.07.2012
comment
Я обновил свой ответ, указав, как загружать чертежи в существующий ImageView. - person Sam; 12.07.2012
comment
Спасибо за ответ. Было бы хорошо, если бы я загрузил изображение следующим образом: ImageView map_image = (ImageView)rowView.findViewById(R.id.route_image); map_image.setImageDrawable (рисунки [позиция]); - person Janpan; 12.07.2012
comment
Это кажется правильным, пока drawables[position] является целочисленным идентификатором (например, R.drawable.route_image_1); - person Sam; 12.07.2012
comment
да это так, спасибо. см. обновление выше. Приближаемся к решению. Спасибо за помощь! - person Janpan; 12.07.2012
comment
Я добавил предложение для ошибки UnsupportedOperationException. - person Sam; 12.07.2012

Почему у вас есть метод getCount(), который должен возвращать значение int и вызывать исключение? Это кажется довольно неловким. Вместо вас следует сделать:

public int getCount()
{
    return yourDataArray.size();
}

Этот метод отвечает за количество строк, которые будет иметь ваш ListView, т. е. если yourDataArray имеет размер = 7, это означает, что у вас будет 7 строк в ListView.

ИЗМЕНИТЬ:

Вот ваше решение:

  1. Замените метод getItem() на:

     public Object getItem(int arg0)
     {
         return arg0;
     }
    
  2. Замените метод getView() адаптера приведенным ниже кодом.

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
    
        if (v == null) {
             LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             View rowView = vi.inflate(R.layout.layout_favorites_row, null);
    
             ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
             TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
             TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
             TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
             ImageView map_image_arrow = (ImageView) rowView.findViewById(R.id.route_arrow);
    
            v.setTag(holder);
        }
        else {
            holder=(ViewHolder)v.getTag();
        }
    
        /** Define here the values to all the Views of the ViewHolder. */
        holder.map_image.setBackgroundDrawable(drawables[position]);
        holder.map_title.setText(titles[position]);
        holder.map_author.setText(authors[position]);
        holder.map_length.setText(durations[position]);
        holder.map_image_arrow.setBackgroundDrawable(d);
    
    return v;
    }
    

    Используйте ViewHolder. Убедитесь, что вы определили внутренний класс ViewHolder, например:

    public static class ViewHolder {
          public TextView map_image ;
          public TextView map_title;
          public TextView map_author;
          public TextView map_length;
          public ImageView map_image_arrow;
    }
    
person yugidroid    schedule 11.07.2012

Проверьте этот метод:

public int getCount()
        {
            throw new UnsupportedOperationException("Not supported yet.");
        }

Возвращаемое значение > 0. Недавно мне это помогло. Я не уверен в вашей проблеме, но просто попробуйте.

person andrei_zaitcev    schedule 11.07.2012
comment
Спасибо за ответ. Исправил эту часть, но все еще получаю ту же ошибку. - person Janpan; 12.07.2012

Вот ваша проблема:

public int getCount()
    {
        throw new UnsupportedOperationException("Not supported yet.");
    }

Вы должны вернуть количество элементов в списке. Что-то вроде этого:

public int getCount()
    {
        if(title == null) {
           return 0;
        }
        return title.length;
    }

Кроме того, то, что сказал Сэм, — это еще одна проблема, которую вы должны решить.

ИЗМЕНИТЬ Увидев код вашего адаптера, я заметил, что вы не используете файл ViewHolder. Я настоятельно рекомендую вам использовать его, так как он может значительно повысить производительность вашего listView. Вот хорошая ссылка, объясняющая все основы работы со списком. Приведенный выше комментарий предназначен только для производительности, но его полезно включить.

Из ответа с наивысшей оценкой этот вопрос SO. Измените эту строку:

View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);

с этим:

View rowView = inflater.inflate(R.layout.layout_favorites_row, parent, false);

и я думаю, что у вас не будет никаких проблем.

person Angelo    schedule 11.07.2012
comment
Спасибо за ответ! Я исправил это, но все равно получаю ту же ошибку. - person Janpan; 12.07.2012
comment
Это исправило! , вместе со всем материалом из ответов Сэма. Спасибо, ребята, обновлю! Большое спасибо. - person Janpan; 12.07.2012