0

私が書き込もうとしているこのアプリのアイデアは、いくつかの写真をオンラインでホストし、個々のURLをsqliteデータベースに保存することです。次に、データベースから各URLを抽出し、ギャラリーウィジェットに表示される画像をダウンロードします。Lazy List(すばらしい仕事のためのkudos!)について読みましたが、実装に問題があります。レイジーリストからコーディングを変更しようとしましたが、機能しないようです。アプリにエラーがあるのか​​、レイジーリストを間違って変更したのかわかりません。どんな助けでも大歓迎です、そして前もってありがとう!=)

私のアプリのコード:

public class ResultDetails extends ListActivity {

    protected int foodId;
    protected String pic1, pic2, pic3, pic4, pic5;
    LazyAdapter adapter1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result_details);
        foodId = getIntent().getIntExtra("FOOD_ID", 0);
        SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT _id, pic1, pic2, pic3, pic4, pic5 FROM database WHERE _id = ?", new String[]{""+foodId});
    pic1 = cursor.getString(cursor.getColumnIndex("pic1"));
    pic2 = cursor.getString(cursor.getColumnIndex("pic2"));
    pic3 = cursor.getString(cursor.getColumnIndex("pic3"));
    pic4 = cursor.getString(cursor.getColumnIndex("pic4"));
    pic5 = cursor.getString(cursor.getColumnIndex("pic5"));
    String[] mStrings={
            pic1,
            pic2,
            pic3, 
            pic4, 
            pic5};
    Gallery g = (Gallery) findViewById(R.id.photobar);
    adapter1=new LazyAdapter(this, mStrings);
    g.setAdapter(adapter1);
}

LazyAdapterを次のように変更しました。

public class LazyAdapter extends BaseAdapter {
   int mGalleryItemBackground;
   private Context mContext;

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }
    public LazyAdapter(Context c) {
       mContext = c;
       TypedArray b = c.obtainStyledAttributes(R.styleable.Theme);
       mGalleryItemBackground = b.getResourceId(
         R.styleable.Theme_android_galleryItemBackground,
                   0);
       b.recycle();
   }


    public int getCount() {
        return data.length;
    }

    public Object getItem(int position) {
        return position;
    }

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

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

        ImageView vi = new ImageView(mContext);
        imageLoader.DisplayImage(data[position], vi);
        vi.setLayoutParams(new Gallery.LayoutParams(150, 100));
    vi.setScaleType(ImageView.ScaleType.FIT_XY);
        return vi;
    }
}
4

1 に答える 1

0

Fedorの助けを借りて、私は実装の何が悪いのかを理解しました。リストでもギャラリーでも、LazyAdapterを変更する必要はありません。アダプターをそのまま使用し、アプリで次のコードを使用して画像をロードします。

 g = (Gallery) findViewById(R.id.photobar);
 adapter1=new LazyAdapter(this, mStrings);
 g.setAdapter(adapter1);}

ギャラリーではなくリストにLazyListを使用する例がたくさんあることに気づきました。ギャラリーで使用したい人を助けるために、実装の例を次に示します。

public class ResultDetails extends ListActivity {

protected int foodId;
protected String pic1, pic2, pic3, pic4, pic5;
LazyAdapter adapter1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.result_details);
    foodId = getIntent().getIntExtra("FOOD_ID", 0);
    SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT _id, pic1, pic2, pic3, pic4, pic5 FROM database WHERE _id = ?", new String[]{""+foodId});
    pic1 = cursor.getString(cursor.getColumnIndex("pic1"));
    pic2 = cursor.getString(cursor.getColumnIndex("pic2"));
    pic3 = cursor.getString(cursor.getColumnIndex("pic3"));
    pic4 = cursor.getString(cursor.getColumnIndex("pic4"));
    pic5 = cursor.getString(cursor.getColumnIndex("pic5"));
    String[] mStrings={pic1, pic2, pic3, pic4, pic5};
    g = (Gallery) findViewById(R.id.photobar);
    adapter1=new LazyAdapter(this, mStrings);
    g.setAdapter(adapter1);}
于 2012-09-14T06:49:19.450 に答える