0

アンドロイドに少し問題があります。Siは何が起こっているのか、私はカスタムアダプタを備えたListViewを持っています、iam tringは動的に行を追加することです、ここにコードがあります:

アダプタ:

public class ProductAdapter extends ArrayAdapter<Product>{

    Context context; 
    int layoutResourceId;    
    String data[] = null;

    public ProductAdapter(Context context, int layoutResourceId,String[] data) {
        super(context, layoutResourceId);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data=data;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ProductHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ProductHolder();
            holder.nameText = (TextView)row.findViewById(R.id.product_name);
            holder.quantityText = (EditText)row.findViewById(R.id.quan_text);

            row.setTag(holder);
        }
        else
        {
            holder = (ProductHolder)row.getTag();
        }


        Product product = DBAdaptor.getProductByName(data[position]);
        holder.img=(ImageView)row.findViewById(R.id.imgIcon);
        holder.nameText.setText(product.getName());
        holder.quantityText.setText(" ");

        return row;
    }



    static class ProductHolder
    {
        ImageView img;
        TextView nameText;
        EditText quantityText;
    }
}

これが私の主な活動です:

public class Main extends Activity
{
    public ListView lstView;
    ProductAdapter productListAdapter;
    DBAdaptor mDb;
    @Override
    protected void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
        openDB();
        productListAdapter = new ProductAdapter(this,        R.layout.shoping_list_row,getAllProducts());
        Bundle b = this.getIntent().getExtras();
        if(b!=null)
        {
            Product p =(Product) b.getSerializable("Product");
            productListAdapter.add(p);
            productListAdapter.notifyDataSetChanged();
        }


    }


}

エラーは発生しませんが、listViewに何も追加されていません

親切なReggards、

4

1 に答える 1

0

ArrayAdapterは、独自のプライベート配列に大きく依存しています。data適切なスーパーコンストラクターを渡す必要があります。

super(context, layoutResourceId, data);

次に、この行を変更する必要があります。

Product product = DBAdaptor.getProductByName(data[position]);

に:

Product product = DBAdaptor.getProductByName(getItem(position));

notifyDataSetChanged()(のようなメソッドを使用する場合も呼び出す必要はありませんArrayAdapter#add()。それはあなたを呼び出しnotifyDataSetChanged()ます。)


アダプターにローカルコピーを使用させたい場合は、、、などをオーバーライドして使用するdata必要があります...しかし、すべてを修正するまでに、ArrayAdapterの多くを使用しなくなる可能性があります。 BaseAdapterを拡張します。getCount()getItem()add()data

データベースを操作したいようですが(openDB())。CursorsとCursorAdaptersは、テーブルを配列に変換するよりもはるかに効率的であるため、使用する必要があります。

于 2012-12-27T22:36:18.717 に答える