如何从绘制创建imges的ArrayList和片段的Lis​​tView显示呢? [英] How do I create an ArrayList of imges from drawable and display it in fragment ListView?

查看:227
本文介绍了如何从绘制创建imges的ArrayList和片段的Lis​​tView显示呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在片段的图像,我希望在一个片段中显示的ListView

这是我已经试过了,u能猜出这有什么错我的code?

我做了一个整数的ArrayList 可绘制的图像

 的ArrayList<整数GT; EX1 =新的ArrayList<整数GT;();
    ex1.add(R.drawable.a);
    ex1.add(R.drawable.b);
    ex1.add(R.drawable.c);
    ex1.add(R.drawable.d);

,并试图把它传递给片段就像我们会通过任何字符串的ArrayList

我在这样的主要活动宣告

 公共静态最终字符串数据=清单;

然后

 捆绑=新包();
    bundle.putIntegerArrayList(DATA,EX1);
    片段片段=新ExFragment();
    fragment.setArguments(参数);
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction英尺= fragmentManager.beginTransaction();
    ft.replace(R.id.container,片段);
    ft.addToBackStack();
    ft.commit();

,然后在片段类

 私人的ArrayList<整数GT;照片=新的ArrayList<>();

在OnCreate中的片段

 如果(getArguments()!= NULL){
        照片= getArguments()getIntegerArrayList(MainMenu.DATA)。
    }

和在oncreateview

 查看rootView = inflater.inflate(R.layout.fragment_ex,集装箱,FALSE);
    ListView控件的ListView =(ListView控件)rootView.findViewById(R.id.listview);
    ArrayAdapter适配器=新ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,R.id.text1,图像);
    listView.setAdapter(适配器);

但它给了我 NullPointerException异常

 显示java.lang.NullPointerException
         在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:395)
         在android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
         在android.widget.AbsListView.obtainView(AbsListView.java:2724)
         在android.widget.ListView.makeAndAddView(ListView.java:1811)
         在android.widget.ListView.fillDown(ListView.java:697)
         在android.widget.ListView.fillFromTop(ListView.java:763)
         在android.widget.ListView.layoutChildren(ListView.java:1641)
         在android.widget.AbsListView.onLayout(AbsListView.java:2549)
         在android.view.View.layout(View.java:15762)
         在android.view.ViewGroup.layout(ViewGroup.java:4867)

这code可以完美兼容 Strign的ArrayList 如果我从整数为String改变,把字符串的ArrayList


解决方案

的Java类CustomAdapter

 进口android.content.Context;
进口android.content.Intent;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;公共类CustomAdapter延伸BaseAdapter {    的String []文本;
    INT []图片;
    上下文语境;    私有静态LayoutInflater吹气= NULL;
    公共CustomAdapter(MainActivity mainActivity,字符串[] TextItem,INT [] mainImages){
        文本= TextItem;
        上下文= mainActivity;
        图片= mainImages;
        充气=(LayoutInflater)上下文。
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @覆盖
    //获取列表中的项目数量
    公众诠释的getCount(){
        返回Text.length;
    }    @覆盖
    //获取列表项的位置
    公共对象的getItem(INT位置){
        返回的位置;
    }    @覆盖
    //?
    众长getItemId(INT位置){
        返回的位置;
    }    公共类持有人
    {
        TextView的电视;
        ImageView的IMG;
    }    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,最终的ViewGroup父){
        持有人持有人=新的持有人();
        查看rowView;        rowView = inflater.inflate(R.layout.YOURCUSTOMXML,NULL);        / **获取相关视图
         *设置图像/文本资源,基于列表的名称,根据列表中的位置
         * /
        holder.img =(ImageView的)rowView.findViewById(R.id.IMAGEIDINCUSTOMXML);
        holder.img.setImageResource(图像[位置]);        holder.tv =(TextView中)rowView.findViewById(R.id.TEXTIDINCUSTOMXML);
        holder.tv.setText(文[位置]);        返回rowView;
    }}

本类可以让你创建自己的ListAdapter与自定义XML布局。结果
你可以把它在你的片段,而不是 android.R.layout.simple_list_item_1 当加载适配器插入的ListView

I have images in fragment that I want to display in a fragment ListView.

This is what I have tried, can u guess what's wrong with my code?

I made an Integer ArrayList of drawable images

 ArrayList<Integer> ex1 = new ArrayList<Integer>();
    ex1.add(R.drawable.a);
    ex1.add(R.drawable.b);
    ex1.add(R.drawable.c);
    ex1.add(R.drawable.d);

and tried to pass it to fragment like we would pass any String ArrayList

I declared in in main activity like this

public static final String Data = "list";

and then

    bundle = new Bundle();
    bundle.putIntegerArrayList(DATA, ex1);
    Fragment fragment = new ExFragment();
    fragment.setArguments(arguments);
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.container, fragment);
    ft.addToBackStack("");
    ft.commit();

and then in fragment class

private ArrayList<Integer> images = new ArrayList<>();

in oncreate of fragment

 if (getArguments() != null) {
        images = getArguments().getIntegerArrayList(MainMenu.DATA);
    }

and in oncreateview

View rootView = inflater.inflate(R.layout.fragment_ex, container, false);
    ListView listView = (ListView) rootView.findViewById(R.id.listview);
    ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, R.id.text1, images);
    listView.setAdapter(adapter);

but it gave me NullPointerException

java.lang.NullPointerException
         at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:395)
         at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
         at android.widget.AbsListView.obtainView(AbsListView.java:2724)
         at android.widget.ListView.makeAndAddView(ListView.java:1811)
         at android.widget.ListView.fillDown(ListView.java:697)
         at android.widget.ListView.fillFromTop(ListView.java:763)
         at android.widget.ListView.layoutChildren(ListView.java:1641)
         at android.widget.AbsListView.onLayout(AbsListView.java:2549)
         at android.view.View.layout(View.java:15762)
         at android.view.ViewGroup.layout(ViewGroup.java:4867)

This code works perfect with Strign ArrayList if I change from Integer to String and put a String ArrayList

解决方案

Java Class CustomAdapter

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends BaseAdapter{

    String [] Text;
    int [] Image;
    Context context;

    private static LayoutInflater inflater=null;
    public CustomAdapter(MainActivity mainActivity, String[] TextItem, int[] mainImages) {
        Text = TextItem;
        context = mainActivity;
        Image = mainImages;
        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    @Override
    // Get number of items in list
    public int getCount() {
        return Text.length;
    }

    @Override
    // Get position of item in list
    public Object getItem(int position) {
        return position;
    }

    @Override
    // ???
    public long getItemId(int position) {
        return position;
    }

    public class Holder
    {
        TextView tv;
        ImageView img;
    }

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        Holder holder=new Holder();
        View rowView;

        rowView = inflater.inflate(R.layout.YOURCUSTOMXML, null);

        /** Get relevant view
         * Set image/text resource, based on list name, based on list position
         */
        holder.img=(ImageView) rowView.findViewById(R.id.IMAGEIDINCUSTOMXML);
        holder.img.setImageResource(Image[position]);

        holder.tv=(TextView) rowView.findViewById(R.id.TEXTIDINCUSTOMXML);
        holder.tv.setText(Text[position]);

        return rowView;
    }

}

This class lets you create your own ListAdapter with a custom XML layout.
You can call it in your fragment instead of android.R.layout.simple_list_item_1 when you load the adapter into your ListView.

这篇关于如何从绘制创建imges的ArrayList和片段的Lis​​tView显示呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆