0

こんにちは、フラグメントで拡張可能なリスト ビューを使用しています。拡張可能なリスト ビューのチェック ボックスをクリックすると、メイン アクティビティの値を配列形式で取得したいと考えています。しかし、クリックするたびにアプリがクラッシュしcheckboxます。

ExpandableListAdapter

package com.example.limitscale.beautylog;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.limitscale.beautylog.model.BookedInfo;

public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;
ArrayList<BookedInfo> selectedarray = new ArrayList<BookedInfo>();
CheckBox check;

public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {
    final String childText = (String) getChild(groupPosition, childPosition);
    String valamt[]  = childText.split(",");

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }

    final LinearLayout content=(LinearLayout) convertView.findViewById(R.id.content);
    final TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);
    final TextView price = (TextView) convertView.findViewById(R.id.aMount);
    check=(CheckBox) convertView.findViewById(R.id.checkBox);
    txtListChild.setText(valamt[0]);
    price.setText("Rs" + valamt[1]);

    check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                BookedInfo bookedInfo = new BookedInfo();
                String check = "1";
                bookedInfo.setServiceName(txtListChild.toString());
                bookedInfo.setmServicePrice(price.toString());
                bookedInfo.setmBrandQty(check);
                selectedarray.add(bookedInfo);
                ((MainActivity) _context).checked(selectedarray);
            }
        }
    });

    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    String headerTitle = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    TextView lblListHeader = (TextView) convertView.findViewById(R.id.lblListHeader);
    lblListHeader.setTypeface(null, Typeface.BOLD);
    lblListHeader.setText(headerTitle);

    return convertView;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}}

ここに私のlogcatがあります

05-20 12:27:21.715  30353-30353/com.example.limitscale.beautylog E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.limitscale.beautylog, PID: 30353
java.lang.ClassCastException: android.app.Application cannot be cast to com.example.limitscale.beautylog.MainActivity
        at com.example.limitscale.beautylog.ExpandableListAdapter$1.onCheckedChanged(ExpandableListAdapter.java:73)
        at android.widget.CompoundButton.setChecked(CompoundButton.java:127)
        at android.widget.CompoundButton.toggle(CompoundButton.java:87)
        at android.widget.CompoundButton.performClick(CompoundButton.java:99)
        at android.view.View$PerformClick.run(View.java:18491)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5336)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:873)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)
        at dalvik.system.NativeStart.main(Native Method)

別のプロジェクトとしてテストしたときは実際には同じコードが完全に機能しましたが、チェックボックスをクリックするとメインプロジェクトアプリにマージするとクラッシュします。

4

4 に答える 4

0

getViewのチェックボックスを定義してください

final CheckBox check=(CheckBox) convertView.findViewById(R.id.checkBox);

最後のチェックボックスの値のみを取得するよりも公に定義すると

于 2016-05-20T07:05:36.313 に答える
0

アプリケーションコンテキストでインスタンス化ExpandableListAdapterしているため、アクティビティにキャストできません(それがエラーの内容です)。new ExpandableListAdapter(getApplicationContext(),...);どこかに似たようなものがあるはずです。でこれを行っている場合はMainActivity、その行を次のように変更する必要があります。new ExpandableListAdapter(MainActivity.this,...);

于 2016-05-20T07:31:40.687 に答える
0

コードでいくつかのエディションに従ってください。それが機能しているかどうかをお知らせください。

 public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData, Activity activity) 
 {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
    this.activity = activity;
 }

およびチェックの変更で、下の変更

check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            BookedInfo bookedInfo = new BookedInfo();
            String check = "1";
            bookedInfo.setServiceName(txtListChild.toString());
            bookedInfo.setmServicePrice(price.toString());
            bookedInfo.setmBrandQty(check);
            selectedarray.add(bookedInfo);
            ((MainActivity) activity).checked(selectedarray);
        }
    }
});
于 2016-05-20T07:13:47.690 に答える