0

ユーザーが複数の値を選択できるチェックボックス付きのカスタマイズ スピナーに baseadapter を使用しています。アプリケーションに更新ボタンがあり、チェックボックスでデータベースからの値を true に設定する必要があります。私の問題は、それを行う方法がわからないことです。たとえば、スピナーに ["A","B","C","D"] 値があり、データベースで B と D を取得しました。アクティビティを開いたときにその値を自動的に確認するにはどうすればよいですか。

カスタマイズスピナーにデータを入力するコードは次のとおりです

private void initializeCustomerSegment() {
    final ArrayList<String> consumerSegments = new ArrayList<String>();
    List<String> consumerSegment = databaseHandler.setItemOnConsumerSeg();
    consumerSegments.addAll(consumerSegment);

    checkSelectedConsumerSegment = new boolean[consumerSegments.size()];
    //initialize all values of list to 'unselected' initially
    for (int i = 0; i < checkSelectedConsumerSegment.length; i++) {
        checkSelectedConsumerSegment[i] = false;
    } 

    final TextView tv_ConsumerSegment = (TextView) findViewById(R.DropDownList.tv_ConsumerSegment);
    tv_ConsumerSegment.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if(!expandedConsumerSegment) {
                // display all selected values
                String selected = "";
                int flag = 0;
                for (int i = 0; i < consumerSegments.size(); i++) {
                    if (checkSelectedConsumerSegment[i] == true) {
                        selected += consumerSegments.get(i);
                        selected += ", ";
                        flag = 1;
                    }
                }

                if(flag == 1) {
                    tv_ConsumerSegment.setText(selected);
                }
                expandedConsumerSegment =true;
            } else {
                //display shortened representation of selected values
                tv_ConsumerSegment.setText(BrandListAdapter.getSelected());
                expandedConsumerSegment = false;
            }
        }
    });

    //onClickListener to initiate the dropDown list
    TextView tv_customerSegment = (TextView)findViewById(R.DropDownList.tv_ConsumerSegment);
    tv_customerSegment.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            initiatePopUpCustomerSegment(consumerSegments,tv_ConsumerSegment);
        }
    });
}

private void initiatePopUpCustomerSegment(ArrayList<String> customerSegments, TextView tv_CustomerSegment) {
    LayoutInflater inflater = (LayoutInflater)S_10th_IReportMain.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    //get the pop-up window i.e.  drop-down layout
    LinearLayout layoutCustomerSegment = (LinearLayout)inflater.inflate(R.layout.pop_up_window_customersegment, (ViewGroup)findViewById(R.id.PopUpView1));

    //get the view to which drop-down layout is to be anchored
    RelativeLayout layout4 = (RelativeLayout)findViewById(R.id.relativeLayout4);
    pwConsumerSegment = new PopupWindow(layoutCustomerSegment, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);

    //Pop-up window background cannot be null if we want the pop-up to listen touch events outside its window
    pwConsumerSegment.setBackgroundDrawable(new BitmapDrawable());
    pwConsumerSegment.setTouchable(true);

    //let pop-up be informed about touch events outside its window. This  should be done before setting the content of pop-up
    pwConsumerSegment.setOutsideTouchable(true);
    pwConsumerSegment.setHeight(LayoutParams.WRAP_CONTENT);

    //dismiss the pop-up i.e. drop-down when touched anywhere outside the pop-up
    pwConsumerSegment.setTouchInterceptor(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                pwConsumerSegment.dismiss();
                return true;                    
            }
            return false;
        }
    });

    //provide the source layout for drop-down
    pwConsumerSegment.setContentView(layoutCustomerSegment);

    //anchor the drop-down to bottom-left corner of 'layout1'
    pwConsumerSegment.showAsDropDown(layout4);

    //populate the drop-down list
    final ListView listCustomerSegment = (ListView) layoutCustomerSegment.findViewById(R.DropDownList.dropDownCustomerSegment);
    ConsumerSegmentListAdapter adapter = new ConsumerSegmentListAdapter(this, customerSegments, tv_CustomerSegment);
    listCustomerSegment.setAdapter(adapter);
}

これが私の ConsumerSegmentListAdapter です。リストビューは私のスピナーとして機能します。

public class ConsumerSegmentListAdapter extends BaseAdapter {
    private ArrayList<String> mListCustomerSegment;
    private LayoutInflater mInflater;
    private TextView mSelectedItems;
    private static int selectedCount = 0;
    private static String firstSelected = "";
    private ViewHolder holder;
    private static String selected = "";    //shortened selected values representation

    public static String getSelected() {
        return selected;
    }

    public void setSelected(String selected) {
        ConsumerSegmentListAdapter.selected = selected;
    }

    public ConsumerSegmentListAdapter(Context context, ArrayList<String> customerSegment,
            TextView tv) {
        mListCustomerSegment = new ArrayList<String>();
        mListCustomerSegment.addAll(customerSegment);
        mInflater = LayoutInflater.from(context);
        mSelectedItems = tv;
    }

    @Override
    public int getCount() {
        return mListCustomerSegment.size();
    }

    @Override
    public Object getItem(int arg0) {
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.drop_down_customersegment, null);
            holder = new ViewHolder();
            holder.tv = (TextView) convertView.findViewById(R.DropDownList.SelectOptionCustomerSegment);
            holder.chkbox = (CheckBox) convertView.findViewById(R.DropDownList.checkboxCustomerSegment);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tv.setText(mListCustomerSegment.get(position));

        final int position1 = position;

        //whenever the checkbox is clicked the selected values textview is updated with new selected values
        holder.chkbox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                setText(position1);
            }
        });

        if(S_10th_IReportMain.checkSelectedConsumerSegment[position])
            holder.chkbox.setChecked(true);
        else
            holder.chkbox.setChecked(false);     
        return convertView;
    }


    /*
     * Function which updates the selected values display and information(checkSelectedConsumerSegment[])
     * */
    private void setText(int position1){
        if (!S_10th_IReportMain.checkSelectedConsumerSegment[position1]) {
            S_10th_IReportMain.checkSelectedConsumerSegment[position1] = true;
            selectedCount++;
        } else {
            S_10th_IReportMain.checkSelectedConsumerSegment[position1] = false;
            selectedCount--;
        }

        if (selectedCount == 0) {
            mSelectedItems.setText(R.string.select_consumersegment);
        } else if (selectedCount == 1) {
            for (int i = 0; i < S_10th_IReportMain.checkSelectedConsumerSegment.length; i++) {
                if (S_10th_IReportMain.checkSelectedConsumerSegment[i] == true) {
                    firstSelected = mListCustomerSegment.get(i);
                    break;
                }
            }
            mSelectedItems.setText(firstSelected);
            setSelected(firstSelected);
        } else if (selectedCount > 1) {
            for (int i = 0; i < S_10th_IReportMain.checkSelectedConsumerSegment.length; i++) {
                if (S_10th_IReportMain.checkSelectedConsumerSegment[i] == true) {
                    firstSelected = mListCustomerSegment.get(i);
                    break;
                }
            }
            mSelectedItems.setText(firstSelected + " & "+ (selectedCount - 1) + " more");
            setSelected(firstSelected + " & "+ (selectedCount - 1) + " more");
        }
    }

    private class ViewHolder {
        TextView tv;
        CheckBox chkbox;
    }
}
4

2 に答える 2