отображать результаты моего массива в пользовательском списке - PullRequest
0 голосов
/ 14 сентября 2011

Я хочу отобразить результаты моего массива с помощью настраиваемого представления списка.

сейчас я показываю свои результаты с помощью макета Android.

setListAdapter(new StudentListAdapter(this,android.R.layout.simple_list_item_1, results));

У меня есть два поля для отображения

  1. Locimage (Изображение из ImageUrl)
  2. Locname (рядом)

файлы находятся здесь: ОШИБКА / AndroidRuntime (335): Причина: java.lang.NullPointerException

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Поскольку вы используете настраиваемый адаптер списка и переопределили метод getView, я думаю, что следующая строка:

setListAdapter(new StudentListAdapter(this,android.R.layout.simple_list_item_1, results));

должно быть:

setListAdapter(new StudentListAdapter(this, results));
0 голосов
/ 14 сентября 2011

попробуйте этот код

import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class FindPlaces extends Activity{

  private SQLiteDatabase DbLoc;
  ListView lv;
  private ArrayList<Fields> results = new ArrayList<Fields>();
  @Override
  public void onCreate(Bundle savedInstance) {
     super.onCreate(savedInstance);
    setContentView(R.layout.places);
    getallLocs();
    displayLocs();

}
private void displayLocs() {
    lv = (ListView)findViewById(R.id.listPlaces);
    lv.setAdapter(new StudentListAdapter(this,results));
}
class StudentListAdapter extends BaseAdapter<Fields>{
    private ArrayList<Fields> locationDetails;
    private Context mContext;

    public StudentListAdapter(Context context, ArrayList<Fields> results) {
        // TODO Auto-generated constructor stub
        System.out.println("Constructor StudentList Adapter...");
        this.locationDetails = results;
        this.mContext = context;
    }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return locationDetails.size();
    }

    @Override
    public Fields getItem(int position) {
        // TODO Auto-generated method stub
        return locationDetails.get(position);
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return super.getItemId(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;
        if(v == null){
            LayoutInflater vl = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vl.inflate(R.layout.placeslist, null);
        }
        Fields o = locationDetails.get(position);

        if (o != null) {

            TextView iv = (TextView)v.findViewById(R.id.toptext);
            TextView tv_sNo = (TextView)v.findViewById(R.id.toptext1);
            iv.setText(o.getLocationName());                            
            tv_sNo.setText(o.getLocationImage());   

        }
       return v;
    }       
}
static class ViewHolder
{
    TextView Locationname;
    ImageView Locationimage;
}
private void getallLocs() {
    // TODO Auto-generated method stub
    try {
        DatabaseHelper dbHelper = new DatabaseHelper(
                this.getApplicationContext());
        DbLoc = dbHelper.getWritableDatabase();
        Cursor c = DbLoc.rawQuery("SELECT " + DatabaseHelper.LocationName+ " , " + DatabaseHelper.LocationImage + " FROM "
                + DatabaseHelper.LOCATIONTABLE , null);
                        if (c != null) {
            if (c.moveToFirst()) {
                do {
                    String LocationName= c.getString(c.getColumnIndex("LocationName"));
                    String Mobile = c.getString(c
                            .getColumnIndex("LocationImage"));
                    Fields p = new Fields(LocationName, Mobile);
                    results.add(p);

                } while (c.moveToNext());
            }
        }
    } catch (SQLiteException se) {
        Log.e(getClass().getSimpleName(),
        "Could not create or Open the database");
    } 
    finally { if (DbLoc != null) DbLoc.execSQL("DELETE FROM " +
            DatabaseHelper.FRIENDTABLE); DbLoc.execSQL("DELETE FROM " +
                    DatabaseHelper.LOCATIONTABLE);  
            DbLoc.execSQL("DROP TABLE IF EXISTS tablename"+ DatabaseHelper.FRIENDTABLE);
            DbLoc.execSQL("DROP TABLE IF EXISTS tablename"+ DatabaseHelper.LOCATIONTABLE);
            DbLoc.close();
    }
}
}
0 голосов
/ 14 сентября 2011

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

Вот что-то действительно простое: http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications

А вот более сложный: http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/

0 голосов
/ 14 сентября 2011

См. Демонстрации API для ListView с несколькими представлениями.

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...