我想在 fragment ListView
中显示 fragment 中的图像。
这是我试过的,你能猜出我的代码有什么问题吗?
我制作了一个 Integer ArrayList
可绘制图像
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);
并尝试将其传递给 fragment ,就像我们传递任何 String ArrayList
我在主要 Activity 中这样声明
public static final String Data = "list";
然后
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();
然后在 fragment 类中
private ArrayList<Integer> images = new ArrayList<>();
在fragment的oncreate中
if (getArguments() != null) {
images = getArguments().getIntegerArrayList(MainMenu.DATA);
}
在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);
但它给了我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)
如果我从 Integer
更改为 String 并放置一个 String ArrayList
,此代码与 Strign ArrayList
完美配合
最佳答案
Java 类自定义适配器
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;
}
}
此类允许您使用自定义 XML 布局创建自己的 ListAdapter。
当您将适配器加载到您的 ListView
中时,您可以在 fragment 中调用它而不是 android.R.layout.simple_list_item_1
。
关于java - 如何从可绘制对象创建图像的 ArrayList 并将其显示在 fragment ListView 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754043/