我是Android新手,我有一个ListFragment,可以在列表中成功显示项目(仅文本)。
//More.class
public class More extends ListFragment{
private ListView mListView;
String android_versions[] = new String[]{"1","2","3","4",};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, android_versions);
mListView.setAdapter(mAdapter);
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.more_listview, container, false);
mListView = (ListView)view.findViewById(android.R.id.list);
return view;
}
}
这是我的Adapter类
//ImageAdapter.class
public class ImageAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public ImageAdapter(Context context, String[] values) {super(context, R.layout.more_item, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.more_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// Change icon based on name
String s = values[position];
System.out.println(s);
if (s.equals("About App")) {
imageView.setImageResource(R.drawable.more_about);
} else if (s.equals("Tools Tutorial")) {
imageView.setImageResource(R.drawable.more_about);
} else if (s.equals("EnfaMama A+ Club")) {
imageView.setImageResource(R.drawable.more_app);
} else if (s.equals("App Technical Contact")) {
imageView.setImageResource(R.drawable.more_app);
}
return rowView;
}
}
这是我对文字和图片的设置
//more_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:contentDescription="@string/image"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="10dp"
android:src="@drawable/tool_settings" >
</ImageView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@+id/label"
android:textSize="20dp"
android:textStyle="bold" /></LinearLayout>
我想在这里实现两件事。
1)我有一个包含Image和Text的自定义适配器,我想使用这个适配器。如何将其集成到More.class中?
ImageAdapter = new ImageAdapter(this, android_versions);
但是我的构造函数未定义。
2)如果我错了,请纠正我,因为据我所知android.R.layout.simple_list_item_1是默认的android列表,我想使用我自己的自定义布局,即R.layout.more_item。
我该怎么办?我做错了什么?
这是我的第一篇文章,如果我问一个愚蠢的问题,我道歉。我希望我足够清楚,让你明白我想要的东西。我对Android的知识很少,所以我希望有人可以指导我如何在这里做。提前谢谢。
答案 0 :(得分:0)
ImageAdapter = new ImageAdapter(this,android_versions);
但我得到构造函数未定义。
您需要使用getActivity()
代替this
,因为您位于片段内(不在活动中)
I tried replacing R.layout.simple_list_item_1 with R.layout.more_item but my application crash.
您无法直接使用默认ArrayAdapter的自定义布局。如果ImageAdapter
发生崩溃,请发布崩溃日志。
试试这个
ImageAdapter mAdapter = new ImageAdapter(getActivity(), android_versions);
mListView.setAdapter(mAdapter);