1

私はこのスレッドに従いました: OnCheckChangedリスナーはcustomlistviewの最初のチェックボックスに対してのみ機能します

私のAndroidアプリケーションでCheckBoxのonCheckedListener()のコードを記述します。上記のリンクにはリストビューがあり、私の場合はグリッドビューがあります。

現時点での私のコードは次のとおりです。

public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;
    ImageView imgView = null;

        if (convertView == null) {

            holder = new ViewHolder(); 
            LayoutInflater ltInflate = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); 
            convertView = ltInflate.inflate(R.layout.griditem, null);

            holder.textview1 = (TextView) convertView.findViewById(R.id.grid_item_alert_date);
            holder.textview2 = (TextView) convertView.findViewById(R.id.grid_item_alert_time);
            holder.textview3 = (TextView) convertView.findViewById(R.id.grid_item_alert_type);

            holder.imageview    = (ImageView) convertView.findViewById(R.id.grid_item_image);
            holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox_ack);
            convertView.setTag(holder);

        }
        else
        {   
            holder = (ViewHolder) convertView.getTag();
        }

        holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

              @Override
              public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 // TODO Auto-generated method stub
                  Toast.makeText(context, " checkbox checked", Toast.LENGTH_SHORT).show();

              } });

        holder.textview1.setId(position);
        holder.textview2.setId(position);
        holder.textview3.setId(position);
        holder.imageview.setId(position);
        holder.checkbox.setId(position);


        holder.textview1.setText("Text 1 ");
        holder.textview2.setText("Text 2 ");
        holder.textview3.setText("Text 3 ");
        holder.checkbox.setChecked(false);
        holder.imageview.setImageBitmap(bitmap);
        holder.id = position;



        return convertView;

}

チェックボックスをオンにすると、アプリケーションがクラッシュします。なぜだろうか。


更新:これは、チェックボックスがオンになった後のlogcat出力です。

10-08 23:01:54.777: I/inh(1950): Item loaded: /images/img1.jpg
10-08 23:02:03.538: D/AndroidRuntime(1950): Shutting down VM
10-08 23:02:03.538: W/dalvikvm(1950): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
10-08 23:02:03.557: E/AndroidRuntime(1950): FATAL EXCEPTION: main
10-08 23:02:03.557: E/AndroidRuntime(1950): java.lang.IllegalStateException: Could not find a method onCheckboxClicked(View) in the activity class com.exp.ir.client.ImageGraph for onClick handler on view class android.widget.CheckBox with id 'checkbox_ack'
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.view.View$1.onClick(View.java:3578)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.view.View.performClick(View.java:4084)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.widget.CompoundButton.performClick(CompoundButton.java:100)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.view.View$PerformClick.run(View.java:16966)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.os.Handler.handleCallback(Handler.java:615)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.os.Looper.loop(Looper.java:137)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at java.lang.reflect.Method.invokeNative(Native Method)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at java.lang.reflect.Method.invoke(Method.java:511)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at dalvik.system.NativeStart.main(Native Method)
10-08 23:02:03.557: E/AndroidRuntime(1950): Caused by: java.lang.NoSuchMethodException: onCheckboxClicked [class android.view.View]
10-08 23:02:03.557: E/AndroidRuntime(1950):     at java.lang.Class.getConstructorOrMethod(Class.java:460)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at java.lang.Class.getMethod(Class.java:915)
10-08 23:02:03.557: E/AndroidRuntime(1950):     at android.view.View$1.onClick(View.java:3571)
10-08 23:02:03.557: E/AndroidRuntime(1950):     ... 12 more
4

1 に答える 1

3

わかりましたので、チェックボックスが定義されているlayout.xmlで問題を発見しました。この行を追加したため、イベントハンドラーが見つかりませんでした

android:onClick="onCheckboxClicked"

これを削除すると、コードは正しく機能するようになりました。

ご覧いただきありがとうございます。

于 2012-10-08T23:12:01.227 に答える