如何根据列表视图中的哪个项目填充布局



我有一个listView,填充了来自ArrayAdapter的书籍详细信息,我想知道是否有任何方法可以创建一个布局,并具有该布局填充取决于我选择的书?

我们被告知只为每本书创建单独的布局,然后在选择本书时夸大这些布局,但是如果可以的话,我宁愿只有一个布局。

下面您可以看到我的布局的一些图像。

listView

我想填充的布局

我不知道哪些代码文件可能会有所帮助,所以我会向一些希望有所帮助。

productdata.java

import java.util.ArrayList;
import java.util.List;

public class ProductData {
    private List<Product> products=new ArrayList<Product>();
    public List<Product> getProducts() {
        return products;
    }

    public ProductData() {
        products.add(new Product("1984", R.drawable.scifi1, 7.99, "George Orwell"));
        products.add(new Product("Ender's Game", R.drawable.scifi2, 8.99, "Orson Scott Card"));
        products.add(new Product("Fahrenheit 451", R.drawable.scifi3,4.89, "Ray Bradbury"));
        products.add(new Product("Brave New World", R.drawable.scifi4,3.49,"Aldous Huxley"));
        products.add(new Product("Do Androids Dream of Electric Sheep?", R.drawable.scifi5,9.99,"Philip K. Dick"));
        products.add(new Product("Dune", R.drawable.scifi6, 13.81, "Frank Herbert"));
    }
}

product.java

import android.os.Bundle;
public class Product {
    // constants for field references
    public static final String PRODUCT_NAME = "productName";
    public static final String IMAGE_RESOURCE = "imageResource";
    public static final String PRICE = "price";
    public static final String DETAILS = "details";
    public static final String AUTHOR = "author";
    // private fields
    private String productName;
    private int imageResource;
    private String details;
    private double price;
    private String author;
    // getters and setters
    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public int getImageResource() {
        return imageResource;
    }
    public void setImageResource(int imageResource) {
        this.imageResource = imageResource;
    }
    public String getDetails() {
        return details;
    }
    public void setDetails(String details) {
        this.details = details;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }

    // Used when creating the data object
    public Product(String id, int imageResource, double price, String author) {
        this.productName = id;
        this.imageResource = imageResource;
        this.price = price;
        this.details = details;
        this.author = author;
    }
    // Create from a bundle
    public Product(Bundle b) {
        if (b != null) {
            this.productName = b.getString(PRODUCT_NAME);
            this.imageResource = b.getInt(IMAGE_RESOURCE);
            this.price = b.getDouble(PRICE);
            this.details = b.getString(DETAILS);
            this.author = b.getString(AUTHOR);
        }
    }
    // Package data for transfer between activities
    public Bundle toBundle() {
        Bundle b = new Bundle();
        b.putString(PRODUCT_NAME, this.productName);
        b.putInt(IMAGE_RESOURCE, this.imageResource);
        b.putDouble(PRICE, this.price);
        b.putString(DETAILS, this.details);
        b.putString(AUTHOR, this.author);
        return b;
    }
    // Output product data
    @Override
    public String toString() {
        return productName;
    }
}

productArrayadapter.java

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class ProductArrayAdapter extends ArrayAdapter<Product> {
    private Context context;
    private List<Product> objects;
    public ProductArrayAdapter(Context context, int resource, List<Product> objects) {
        super(context, resource, objects);
        this.context = context;
        this.objects = objects;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Product product=objects.get(position);

        LayoutInflater inflater =
                (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.product_listitem, null);
        ImageView image = (ImageView) view.findViewById(R.id.ivProductImage);
        image.setImageResource(product.getImageResource());
        TextView tv = (TextView) view.findViewById(R.id.tvProductName);
        tv.setText(product.getProductName());
        TextView tvp = (TextView) view.findViewById(R.id.tvProductPrice);
        String priceDouble= Double.toString(product.getPrice());
        tvp.append(priceDouble);
        TextView tva = (TextView) view.findViewById(R.id.tvProductAuthor);
        tva.setText(product.getAuthor());
        return view;
    }

}

productsfragment.java

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;

public class ProductsFragment extends ListFragment {
    List<Product> products = new ProductData().getProducts();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ProductArrayAdapter adapter = new ProductArrayAdapter(getActivity(),
                R.layout.product_listitem,
                products);
        setListAdapter(adapter);
    }
    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_products, container, false);
        return rootView;
    }

}

我猜你在说什么,您想在单击列表中的项目

时要夸大另一个布局

您可以简单地使用 OnItemClick ,然后夸大所需的布局,或者通过启动另一个 Activity

取决于数据,有两个布局或所需的数量:

下面的代码适配器:

private final int VIEW_TAG = 0, VIEW_UNTAG = 1;
@Override
public CustomPicker onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = null;
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    switch (viewType) {
        case VIEW_TAG:
            view = inflater.inflate(R.layout.row_dialog_tag, parent, false);
            break;
        case VIEW_UNTAG:
            view = inflater.inflate(R.layout.row_dialog_untag, parent, false);
            break;
    }

    return new CustomPicker(view);
}
@Override
public int getItemViewType(int position) {
    if (!tagList.get(position).getTagName().equals("UnTag")) {
        return VIEW_TAG;
    } else {
        return VIEW_UNTAG;
    }
}

最新更新