我正在尝试编辑listView上的行以包含复选框。我的listView项目的布局在这里定义:
<?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="?android:attr/listPreferredItemHeight"
android:padding="5dip"
>
<ImageView
android:id="@+id/ivIcon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="5dip"
android:scaleType="center"
android:contentDescription="@string/desc"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<TextView
android:id="@+id/tvName"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
/>
<TextView
android:id="@+id/tvPack"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
/>
</LinearLayout>
<Checkbox
android:id="@+id/addCheckbox"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center_vertical"
/>
</LinearLayout>
然后我有一个自定义适配器,如下所示:
package com.example.awesomefilebuilderwidget;
IMPORTS
public class AppInfoAdapter extends BaseAdapter implements Filterable {
private Context mContext;
private List<ApplicationInfo> mListAppInfo;
private PackageManager mPackManager;
private List<ApplicationInfo> originalListAppInfo;
private Filter filter;
public AppInfoAdapter(Context c, List<ApplicationInfo> listApp, PackageManager pm) {
mContext = c;
this.originalListAppInfo = this.mListAppInfo = listApp;
mPackManager = pm;
}
@Override
public int getCount() {
return mListAppInfo.size();
}
@Override
public Object getItem(int position) {
return mListAppInfo.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the selected entry
ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position);
// reference to convertView
View v = convertView;
// inflate new layout if null
if(v == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
v = inflater.inflate(R.layout.layout_appinfo, null);
}
// load controls from layout resources
ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);
CheckBox addCheckbox = (CheckBox)v.findViewById(R.id.addCheckbox);
// set data to display
ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
tvAppName.setText(entry.loadLabel(mPackManager));
tvPkgName.setText(entry.packageName);
addCheckbox.setChecked(true);
checkButtonClick();
// return view
return v;
}
private void checkButtonClick() {
// do nothing
}
现在我已将复选框设置为什么都不做,但我只是想确保它出现。
以下是我运行应用时遇到的错误:
10-24 13:59:23.730: E/AndroidRuntime(4931): FATAL EXCEPTION: main
10-24 13:59:23.730: E/AndroidRuntime(4931): android.view.InflateException: Binary XML file line #44: Error inflating class Checkbox
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-24 13:59:23.730: E/AndroidRuntime(4931): at com.example.awesomefilebuilderwidget.AppInfoAdapter.getView(AppInfoAdapter.java:58)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.AbsListView.obtainView(AbsListView.java:1449)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.ListView.measureHeightOfChildren(ListView.java:1265)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.ListView.onMeasure(ListView.java:1128)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3257)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.SlidingDrawer.onMeasure(SlidingDrawer.java:273)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:581)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:365)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3257)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3257)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.View.measure(View.java:8541)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.ViewRoot.performTraversals(ViewRoot.java:903)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.ViewRoot.handleMessage(ViewRoot.java:1961)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.os.Looper.loop(Looper.java:150)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.app.ActivityThread.main(ActivityThread.java:4333)
10-24 13:59:23.730: E/AndroidRuntime(4931): at java.lang.reflect.Method.invokeNative(Native Method)
10-24 13:59:23.730: E/AndroidRuntime(4931): at java.lang.reflect.Method.invoke(Method.java:507)
10-24 13:59:23.730: E/AndroidRuntime(4931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-24 13:59:23.730: E/AndroidRuntime(4931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-24 13:59:23.730: E/AndroidRuntime(4931): at dalvik.system.NativeStart.main(Native Method)
10-24 13:59:23.730: E/AndroidRuntime(4931): Caused by: java.lang.ClassNotFoundException: android.view.Checkbox in loader dalvik.system.PathClassLoader[/data/app/com.example.awesomefilebuilderwidget-2.apk]
10-24 13:59:23.730: E/AndroidRuntime(4931): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
10-24 13:59:23.730: E/AndroidRuntime(4931): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
10-24 13:59:23.730: E/AndroidRuntime(4931): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.createView(LayoutInflater.java:471)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
10-24 13:59:23.730: E/AndroidRuntime(4931): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
10-24 13:59:23.730: E/AndroidRuntime(4931): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
10-24 13:59:23.730: E/AndroidRuntime(4931): ... 38 more
我该如何解决这个问题?
答案 0 :(得分:9)
XML中的<Checkbox
标记应为<CheckBox
(上面的B)
答案 1 :(得分:0)
其CheckBox
,而非您在xml