如何根据ListView中的哪个项目选择填充布局?

时间:2017-04-26 13:04:49

标签: java android

我有一个ListView,其中填充了来自arrayAdapter的书籍详细信息,我想知道是否有任何方法可以创建一个布局并根据我选择的书填充该布局?

我们被告知要为每本书创建单独的布局,然后在选择书籍时对这些布局进行充气,但如果可以的话,我宁愿只有一个布局。

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

ListView

Layout that I want to populate

我不知道哪些代码文件可能会有所帮助,所以我会展示一些有希望提供帮助的文件。

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;
    }


}

2 个答案:

答案 0 :(得分:1)

我猜你所说的是,你想在单击列表中的项目时给另一个布局充气

您只需使用 OnItemClick ,然后夸大您想要的布局,或者只需启动另一个 Activity

答案 1 :(得分:0)

根据数据制作两个布局或多个布局:

适配器内的代码:

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;
    }
}