2

我正在尝试编辑我的 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

我怎样才能解决这个问题?

4

2 回答 2

9

您的 XML 中的<Checkbox标记应该是<CheckBox(带有上 B)

于 2013-10-24T20:10:31.477 回答
0

CheckBox,而不是 xml 中的复选框

于 2013-10-24T20:11:18.870 回答