0

私は今完全に迷子になっているので、誰かが私を助けてくれることを願っています。

指定されたリストからリストビューにデータを取り込むこのカスタムアダプタを作成しました。

問題はマイナスボタンとプラスボタンにあります。どちらにも、どちらが押されたかに応じて1カウントでテキストビューを変更するリスナーがあります。また、ソースリストも変更します。

これが最終的なビューを示すPICの写真です。

最初の行から最初に押されたボタンがすべて機能する場合は、問題なく残りのボタンを使用できます。ただし、押されたものが他の1つである場合、アプリケーションはクラッシュします。

与えられたエラーは、特定のリストアイテムの元のリストに+1またはremove-1を追加しようとしたときのnullpointerexceptionです。

それ以上必要な場合はお問い合わせください。ご清聴ありがとうございました。

public class MenuListAdapter extends BaseAdapter {

private Context mContext;
private int mLayoutResourceId;

public MenuListAdapter(Context context, int textViewResourceId) {
     mContext = context;
     mLayoutResourceId = textViewResourceId;
}

public int getCount() {
    return SavedMenuList.INSTANCE.size();
}

public MenuListItem getItem(int position) {
    return SavedMenuList.INSTANCE.getItem(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        rowView = inflater.inflate(mLayoutResourceId, null);
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.checkBox = (CheckBox) rowView.findViewById(R.id.confirmation_list_row_check);
        viewHolder.text = (TextView) rowView.findViewById(R.id.confirmation_list_row_name);
        viewHolder.minus = (ImageButton) rowView.findViewById(R.id.confirmation_list_row_remove_button);
        viewHolder.minus.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                MenuListItem item = (MenuListItem) viewHolder.minus.getTag();
                SavedMenuList.INSTANCE.removeOneItemCount(item);
                notifyDataSetChanged();
            }
        });
        viewHolder.count = (TextView) rowView.findViewById(R.id.confirmation_list_row_count);
        viewHolder.plus = (ImageButton) rowView.findViewById(R.id.confirmation_list_row_add_button);
        viewHolder.plus.setOnClickListener(new OnClickListener() {      
            public void onClick(View v) {
                MenuListItem item = (MenuListItem) viewHolder.plus.getTag();
                SavedMenuList.INSTANCE.addOneItemCount(item);
                notifyDataSetChanged();
            }
        });
        viewHolder.itemid = (TextView) rowView.findViewById(R.id.confirmation_list_row_itemid);
        viewHolder.typeid = (TextView) rowView.findViewById(R.id.confirmation_list_row_typeid);
        rowView.setTag(viewHolder);
    }else{
        rowView = convertView;
        ((ViewHolder) rowView.getTag()).checkBox.setTag(getItem(position));
        ((ViewHolder) rowView.getTag()).minus.setTag(getItem(position));
        ((ViewHolder) rowView.getTag()).plus.setTag(getItem(position));
    }
    ViewHolder holder = (ViewHolder) rowView.getTag();
    MenuListItem item = getItem(position);

    holder.text.setText(item.getmItemName() + " (" + item.getmItemTypeName() + ")");
    holder.count.setText(String.valueOf(item.getmItemCount()));
    holder.typeid.setText(String.valueOf(item.getmItemId()));
    holder.typeid.setText(String.valueOf(item.getmItemTypeId()));

    return rowView;
}

static class ViewHolder {
    public CheckBox checkBox;
    public TextView text;
    public ImageButton minus;
    public TextView count;
    public ImageButton plus;
    public TextView itemid;
    public TextView typeid;
}

}

そしてこれはエラーです:

04-22 02:54:22.398:E / AndroidRuntime(7112):giorgi.betaproject.utils.SavedMenuList.addOneItemCount(SavedMenuList.java:34)

public enum SavedMenuList {
    INSTANCE;

    List <MenuListItem> mList = new ArrayList<MenuListItem> ();

...
    public boolean addOneItemCount(MenuListItem item) {
        for (MenuListItem mItem: mList){
            if (item.equals(mItem)){
                mItem.addOneItemCount();
                return true;
            }
        }
        return false;
    }
...
}
4

1 に答える 1

0
public boolean addOneItemCount(MenuListItem item) {
    for (MenuListItem mItem: mList){
        if (item.equals(mItem)){
            mItem.addOneItemCount();
            return true;
        }
    }
    return false;
}

item上記のコードでは、getViewメソッドに設定したことがないため、nullです。

viewHolder.plus.setOnClickListener(new OnClickListener() {      
    public void onClick(View v) {
    MenuListItem item = (MenuListItem) viewHolder.plus.getTag();
    SavedMenuList.INSTANCE.addOneItemCount(item);
    notifyDataSetChanged();
    }
});

次の行に注意してください:MenuListItem item = (MenuListItem) viewHolder.plus.getTag();、ビューgetTag()から実行しますが、コードで実行することはありません。これにより、NullPoinaterExceptionが確実に発生します。minusviewHolder.plus.setTag(...)

于 2012-04-22T02:07:29.433 に答える