如何从绘制创建imges的ArrayList和片段的ListView显示呢? [英] How do I create an ArrayList of imges from drawable and display it in fragment ListView?
问题描述
我在片段的图像,我希望在一个片段中显示的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和片段的ListView显示呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!