【问题标题】:Adding dynamic ListView to fragment (specific project)将动态 ListView 添加到片段(特定项目)
【发布时间】:2013-11-20 23:09:07
【问题描述】:

我试图弄清楚如何将动态 ListView 实现到片段中,但无法弄清楚。此项目使用自定义 ArrayAdapter。

Custom ListView with custom adapter

我想我会链接教程页面,而不是仅仅粘贴所有内容。我将如何在片段页面中进行这项工作?

FeaturedDealsFragment.java(片段类)

public class FeaturedDealsFragment extends Fragment {

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  

    View V = inflater.inflate(R.layout.fragment_featured_deals, container, false);

    ListView LV = (ListView) this.getActivity().findViewById(R.id.listView1);

    Deal deal_data[] = new Deal[]
            {
                new Deal("Deal 1", R.drawable.scenery, "500/100 Supporters", "$500"),
                new Deal("Deal 2", R.drawable.scenery, "500/100 Supporters", "$500"),
                new Deal("Deal 3", R.drawable.scenery, "500/100 Supporters", "$500"),
                new Deal("Deal 4", R.drawable.scenery, "500/100 Supporters", "$500"),
                new Deal("Deal 5", R.drawable.scenery, "500/100 Supporters", "$500")
            };

    DealAdapter adapter = new DealAdapter(getActivity(), R.layout.listview_item_row, deal_data);

    View header = (View)inflater.inflate(R.layout.listview_header_row, null);
    LV.addHeaderView(header);
    LV.setAdapter(adapter);

    return V;

}

}

DealAdapter.java

public class DealAdapter extends ArrayAdapter<Deal>{

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

public DealAdapter(Context context, int layoutResourceId, Deal[] data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

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

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

        holder = new DealHolder();
        holder.txtDeal = (TextView)row.findViewById(R.id.txtDeal);
        holder.imgDealImage = (ImageView)row.findViewById(R.id.imgDealImage);
        holder.txtSupporters = (TextView)row.findViewById(R.id.txtSupporters);
        holder.txtPrice = (TextView)row.findViewById(R.id.txtPrice);

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

    Deal deal = data[position];
    holder.txtDeal.setText(deal.deal);
    holder.imgDealImage.setImageResource(deal.image);
    holder.txtSupporters.setText(deal.supporters);
    holder.txtPrice.setText(deal.price);

    return row;
}

static class DealHolder
{
    TextView txtDeal;
    ImageView imgDealImage;
    TextView txtSupporters;
    TextView txtPrice;
}
}

Deal.java

public class Deal {
public String deal;
public int image;
public String supporters;
public String price;

public Deal() {
    super();
}

public Deal(String deal, int image, String supporters, String price) {
    super();
    this.deal = deal;
    this.image = image;
    this.supporters = supporters;
    this.price = price;
}
}

【问题讨论】:

    标签: android listview fragment android-arrayadapter


    【解决方案1】:

    不要调用 Activity 类中的方法 getLayoutInflater(),只需使用传递给 onCreateView 方法的 LayoutInflater:

    View header = (View) inflater.inflate(R.layout.listview_header_row, null);
    

    片段不是上下文的子类。获取对 Context 对象的引用的最简单方法通常是获取对作为 Context 子类的 Activity 的引用。因此,您需要将 WeatherAdapter 更改为:

    WeatherAdapter adapter = new WeatherAdapter(getActivity(), R.layout.listview_item_row, weather_data);
    

    【讨论】:

    • 我在上面添加了 WeatherAdapter 类代码。感谢您的帮助!
    • 更新和整理的答案。我希望它有帮助:)
    • 这解决了我出现错误的问题,但在我运行它时仍然崩溃。请看上面,我稍微编辑了代码,但格式相同。当我填充它时,又添加了两个 TextView。此外,将“天气”更改为“优惠”。
    • 您能否发布您收到的错误消息?在 Eclipse 的 LogCat 窗口中应该有一条红色的错误消息。
    • 还有更多...有没有更简单的方法来显示问题所在?
    【解决方案2】:

    我猜你想要一个包含一个片段的活动,其中包含一个 ListView。

    正确的方法是创建一个 Fragment 并在其布局中添加一个 ListView。在其 onCreateView 方法中获取 ListView 引用并设置您的适配器。

    在活动中,您可以通过 XML 布局或以编程方式在 onCreate 方法中添加片段。

    我不知道这是不是你要找的。​​p>

    【讨论】:

    • 这正是我想要做的。我已经设置了片段页面,但我正在尝试将 ListView 添加到片段中。我在上面的片段中添加了我的代码。 WeatherAdapter 行中有错误:“构造函数 WeatherAdapter 未定义”。在下面的行中,View 标题说:“Fragment 类型的方法 getLayoutInflater(Bundle) 不适用于参数”。
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多