Не устанавливать флажок при нажатии .. но проверять условие

#android #listview #checkbox

#Android #listview #флажок

Вопрос:

Я пытаюсь установить флажок при некотором условии, которое должно выполняться при других действиях, при нажатии флажка, содержащего listview. Я нажму на свой флажок listview containg, который приведет меня к другому действию, где я заполню форму и вернусь к своему listview со статусом, в зависимости от которого я буду устанавливать флажок. Для этого я использую static arraylist для хранения данных listview, по которым я получил статус успеха, и с помощью этого флажка arraylist установлен флажок. Вот мой код:

    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        final FinalSubmitItem rowItem = getItem(position);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {  
            convertView = inflater.inflate(R.layout.customview_finalsubmit_itemdetails, null);
            holder = new ViewHolder();  
            holder.txtItemType = (TextView) convertView.findViewById(R.id.ItemtypeFinal);
            holder.txtCountry = (TextView) convertView.findViewById(R.id.txtcountryFinal);    
            holder.txtSerial = (TextView) convertView.findViewById(R.id.txtItemNumberFinal);
            holder.chck = (CheckBox) convertView.findViewById(R.id.itemCheck);
            convertView.setTag(holder);
        } else{
            holder = (ViewHolder) convertView.getTag();
            }

            holder.txtItemType.setText(rowItem.getItemType());
            holder.txtCountry.setText(rowItem.getItemCountry());
            holder.txtSerial.setText(rowItem.getItemNo());              

                 if(position == 0){
                    holder.chck.setChecked(false);
                 }
                for(int i=0; i<checkedInfo.size(); i  ){
                    if(rowItem.getItemNo().equals(checkedInfo.get(i).getItemSerialVerified())){
                        rowItem.setItemCheck(true);
                        }
                    }
                if(rowItem.isItemCheck()){
                    holder.chck.setChecked(true);
                }


            convertView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    String itemType = rowItem.getItemType();
                    String itemCountry = rowItem.getItemCountry();
                    String itemSerial = rowItem.getItemNo();
                    int itemTypeId = rowItem.getItemId();
                    int pickupId = rowItem.getPickupId();
                    Intent inn = new Intent(context, FinalSubmitDetails.class);
                    inn.putExtra("itemType", itemType);
                    inn.putExtra("itemCountry", itemCountry);
                    inn.putExtra("itemSerial", itemSerial);
                    inn.putExtra("itemId", itemTypeId);
                    inn.putExtra("pickupId", pickupId);
                    context.startActivity(inn);
                }
            } );
            notifyDataSetChanged();
        return convertView;
    }     
  

В других действиях:

             if(response.contains("Success.")){
                serialNumberVerf = serialNumber;
                itemIdVerified = itemId;
                actionIdVerified = actionId;
                ItemCheckedInfo info = new ItemCheckedInfo();
                info.setActionIdVerified(actionIdVerified);
                info.setItemIdVerified(itemIdVerified);
                info.setItemSerialVerified(serialNumberVerf);
                checkedInfo.add(info);

            Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
            onBackPressed();
  

Но это не работает, и я объявил этот arraylist в классе, в котором объявлен класс customview.

Комментарии:

1. В чем ваш вопрос?

2. И почему ArrayList статичен?

3. Что означает «это не работает»?

4. @Code-Ученик отредактирован.. пожалуйста, проверьте

5. ни его установка флажка, ни его выполнение с несколькими флажками.. Я хочу оба

Ответ №1:

Я сделал это так .. просто одна строка, отредактированная в методе getview ():

 ((Activity) context).startActivityForResult(inn, 1);
  

И при успешном выполнении это:

 Intent returnIntent = new Intent();
returnIntent.putExtra("position", position);
setResult(RESULT_OK,returnIntent);
finish();
  

Наконец, в основной деятельности это было сделано:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            int positionResult=data.getIntExtra("position",0);
            itemInfo.get(positionResult).setItemCheck(true);
            item.notifyDataSetChanged();
        }
}
} 
  

Ответ №2:

Вам нужно переопределить setOnCheckedChangeListener

http://developer.android.com/reference/android/widget/CompoundButton.html#setOnCheckedChangeListener(android.widget.CompoundButton.OnCheckedChangeListener)

[Править]

На самом деле мне нужно выполнить что-то по щелчку listview .. вот почему я его не использовал
Вы можете переопределить onItemClickListener его.

Комментарии:

1.На самом деле мне нужно выполнить что-то по щелчку listview .. вот почему я его не использовал

2. convertView.setOnClickListener делает то же самое

3. Для этого вам нужно установить прослушиватель на флажок.

4. Я просто хочу проверить это при условии.. У меня нет никаких причин вызывать listener