0

ListActivityすべての行に画像とテキストを表示する必要がある があります。

レイアウトは次のevent.xmlようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
    <ImageView  android:layout_height="wrap_content"
        android:layout_width="30px"
        android:layout_marginTop="2px" android:layout_marginRight="2px"
        android:layout_marginLeft="2px" android:id="@+id/logoImage">
    </ImageView>
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/title"
        android:textSize="15px"></TextView>
</LinearLayout>

アクティビティは次のようになります。

 public class Activity extends ListActivity{

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        dba=new DatabaseAdapter(this);

        dba.open();

        View header = getLayoutInflater().inflate(R.layout.header, null);
        ListView lv = getListView();
        lv.addHeaderView(header);

        fillOnStart();
    }

    private void fillOnStart(){
        ArrayList<Title> temp = dba.returnTitle();    // this works

        ArrAdapter notes = new ArrAdapter(this, temp);

        Toast.makeText(this, "Size: " +notes.getCount(), Toast.LENGTH_LONG).show();             
        //because this show good size

        setListAdapter(notes);             
        }

私のアダプターは次のようになります。

 private class ArrAdapter extends BaseAdapter{
        private Context mContext;
        private ArrayList<Title> lista;

        public ArrAdapter(Context c, ArrayList<Title> list){
            mContext = c;
            this.lista =list;
        }

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

        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //  ViewHolder vh =null;
            Title title= lista.get(position);
            LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View v = inflater.inflate(R.layout.event, parent, false);

            ImageView imlogo = (ImageView)v.findViewById(R.id.logoImage);
            TextView textTitle = (TextView)v.findViewById(R.id.title);

            imlogo.setImageResource(title.getLogo());
           textTitle.setText(title.getTit());

            return v; 
        }
    }

クラスのタイトルは次のようになります。

 public class Title {

        public int id;
        public String tit;
        public Bitmap logo;
public Bitmap getLogo() {
        return logo;
    }
        ... and other setter and getter      
    }

メソッドは Arraylist (dba 単位) を返し、Title は次のようになります。

   public ArrayList<Title> returnTitle(){ 
            Title t = new Title(1,"aaaaaaaaaa", BitmapFactory.decodeFile("C:\\Users\\hormon\\Desktop\\favicon.ico"));
            Title t1 = new Title(2,"assdsdsdsdaa", BitmapFactory.decodeFile("C:\\Users\\hormon\\Desktop\\icon.ico"));

            ArrayList<Title> art = new ArrayList<Title>(2);
            art.add(t);
            art.add(t1);

            return  art;
        }

マイ リスト アクティビティにテキストしか表示されない。テキスト付きの画像を表示するには、何を変更する必要がありますか?

4

2 に答える 2

0

これを確認してください。これは、必要なものの完全で簡単な例です。

カスタム ArrayAdapter を使用した ListView アイテム

于 2011-11-25T18:17:25.443 に答える
0

Title ロゴ プロパティを割り当てようとしている方法に問題がある可能性があります。このBitmapFactory.decodeFileメソッドはマシンへのローカル パスを使用せず、Android デバイス自体からのパスを使用します。ただし、アプリの描画可能フォルダーから画像リソースを使用するのが最も一般的です。

public ArrayList<Title> returnTitle(Context ctx){ 
    Title t1 = new Title(1, "aaaaaaaaaa", BitmapFactory.decodeResource(ctx.getResources(), R.drawable.favicon));
    Title t2 = new Title(2, "assdsdsdsdaa", BitmapFactory.decodeResource(ctx.getResources(), R.drawable.icon));

    ArrayList<Title> art = new ArrayList<Title>(2);
    art.add(t1);
    art.add(t2);
    return art;
}

そして、アクティビティからそのメソッドを呼び出すと、次のようになります

private void fillOnStart(){
    ArrayList<Title> temp = dba.returnTitle(this);
    // ...
}

また、お気づきかどうかはわかりませんが、レイアウトではテキスト フィールドの ID は ですtitleが、アダプターでは として参照されtytulます。

于 2011-11-25T18:25:53.200 に答える