具有edittext和textwatcher侦听器的ExpandListview。 Textwatcher多次触发

时间:2019-01-03 14:00:06

标签: android android-studio android-edittext expandablelistview android-textwatcher

我们正面临着textwatcherlistener(即键盘)多次出现的问题。 Edittext输入类型为数字,但屏幕显示2个小键盘,即数字和默认键盘。 。     我们正在使用expandlistview(在另外一个expandlustview动态数据中)具有一个edittext。使用textwatcher列表器编辑文本。用childview编写的textwatcher代码。

试图隐藏键盘,但是没有用。

import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.widget.CardView;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.TextKeyListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.wavelabs.waterlily.main.R;
import com.wavelabs.waterlily.main.activities.SelectProductActivity;
import com.wavelabs.waterlily.main.model.IGrouponListener;
import com.wavelabs.waterlily.main.model.Product;
import com.wavelabs.waterlily.main.model.ProductCategory;

import java.util.ArrayList;
import java.util.List;

import static android.graphics.Typeface.BOLD;
import static android.view.View.GONE;

public class CategoriesAdapter extends BaseExpandableListAdapter {

    private static final String RETAILERLABEL = "RETAILER";
    private List<ProductCategory> parentData;
    private Context context;
    private IGrouponListener grouponListener;
    private ClickListener clickListener;
    private boolean isResettingKeyboard;

    public CategoriesAdapter(List<ProductCategory> productHeaders, Context context) {
        this.parentData = productHeaders;
        this.context = context;
        this.grouponListener = (IGrouponListener) context;
    }


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

    @Override
    public int getChildrenCount(int groupPosition) {
        if (parentData.get(groupPosition).isHasSubCategory()) {
            return 1;
        } else {
            int subCategoryCount = parentData.get(groupPosition).getProduct().isEmpty() ? 1 : parentData.get(groupPosition).getProduct().size();
            return subCategoryCount;
        }
//        int subCategoryCount = parentData.get(groupPosition).isHasSubCategory() ? parentData.get(groupPosition).getSubCategories().size() : 0;
//     Log.i("Tag","10");
    }

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childPosition;
    }

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

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

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

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View inflate = inflater.inflate(R.layout.row_first, null);
        TextView text = inflate.findViewById(R.id.tv_rowParentText);
        CardView card = inflate.findViewById(R.id.card_parent);
        ImageView imageView = inflate.findViewById(R.id.imageView_indicator);
        TextView textViewChild = inflate.findViewById(R.id.tv_rowChildText);
        ImageView imageViewChildIndicator = inflate.findViewById(R.id.imageViewChild_indicator);

        ProductCategory productCategory = parentData.get(groupPosition);
        String parentId = productCategory.getParentCatId();

        if (parentId.equals("null")) {
            text.setVisibility(View.VISIBLE);
            card.setVisibility(View.VISIBLE);
            imageView.setVisibility(View.VISIBLE);
            textViewChild.setVisibility(GONE);
            imageViewChildIndicator.setVisibility(GONE);
            text.setTextAppearance(R.style.TextAppearance_AppCompat_Large);
            text.setTextColor(text.getContext().getColor(R.color.textcolor));
            text.setTypeface(null, BOLD);
            String name = productCategory.getName();
            name = name.substring(0,1)+name.substring(1,name.length()).toLowerCase();
            text.setText(name.trim());
            if (isExpanded) {
                imageView.setImageResource(R.mipmap.arrowup_black);
            } else {
                imageView.setImageResource(R.mipmap.arrowdown_black);
            }
        } else {
            text.setVisibility(View.GONE);
            card.setVisibility(View.GONE);
            imageView.setVisibility(View.GONE);
            textViewChild.setVisibility(View.VISIBLE);
            imageViewChildIndicator.setVisibility(View.VISIBLE);
            textViewChild.setTextAppearance(R.style.TextAppearance_AppCompat_Medium);
            textViewChild.setAllCaps(false);
            textViewChild.setTypeface(null, BOLD);
            textViewChild.setTextColor(text.getContext().getColor(R.color.textcolor));
            String name = productCategory.getName();
            name = name.substring(0,1)+name.substring(1,name.length()).toLowerCase();
            textViewChild.setText(name.trim());
            if (isExpanded) {
                imageViewChildIndicator.setImageResource(R.mipmap.arrowup_black);
            } else {
                imageViewChildIndicator.setImageResource(R.mipmap.arrowdown_black);
            }
        }
        return inflate;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, final View convertView, ViewGroup parent) {
        final ProductCategory productCategory = parentData.get(groupPosition);
        View inflate;
        if (parentData.get(groupPosition).isHasSubCategory()) {
            final ChildLevelExpandableListView childLevelExpandableListView = new ChildLevelExpandableListView(context);
            final List<ProductCategory> subCategories = parentData.get(groupPosition).getSubCategories();
            final CategoriesAdapter categoriesAdapter = new CategoriesAdapter(subCategories, context);
            categoriesAdapter.setOnItemClickListener(clickListener);
            childLevelExpandableListView.setAdapter(categoriesAdapter);
            childLevelExpandableListView.setGroupIndicator(null);
            childLevelExpandableListView.setDividerHeight(2);
            childLevelExpandableListView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
            childLevelExpandableListView.setScrollBarSize(0);
            childLevelExpandableListView.setPadding(25,0,25,0);

            childLevelExpandableListView.setItemsCanFocus(true);
            childLevelExpandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
                @Override
                public void onGroupExpand(int groupPosition) {
                    if(childLevelExpandableListView.isGroupExpanded(groupPosition)){
                        Log.i("TAG","isExpanded");
                    }
                    if (grouponListener != null) {
                        grouponListener.onGroupExpandedListener(subCategories.get(groupPosition), categoriesAdapter,childLevelExpandableListView,groupPosition);
                    }
                }
            });


            childLevelExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                    return false;
                }
            });
            return childLevelExpandableListView;
        } else {
            if (!productCategory.getProduct().isEmpty()) {
                LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflate = layoutInflater.inflate(R.layout.item_product_list, null);
                TextView tvName = inflate.findViewById(R.id.tv_listProductItem_name);
                TextView tvCost = inflate.findViewById(R.id.tv_listProductItem_cost);
                final Button btnAdd = inflate.findViewById(R.id.btn_productList_add);
                final LinearLayout llAdditem = inflate.findViewById(R.id.ll_product_additem);
                final TextView tvProductQty = inflate.findViewById(R.id.tv_productQty);
                final EditText amount = inflate.findViewById(R.id.amount);
                final Product product = productCategory.getProduct().get(childPosition);
                String productName = product.getProductName();
                tvName.setText(productName.trim());
                amount.setTag(R.id.amount, childPosition);
                if (context instanceof SelectProductActivity) {
                    SelectProductActivity selectProductActivity = (SelectProductActivity) context;
                    Product productAvailable = selectProductActivity.isProductAvailable(product);

amount.addTextChangedListener(new TextWatcher() {
                       boolean editing = false;

                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                        }

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {

                        }

                        @Override
                        public void afterTextChanged(Editable s) {
                            String enteredAmount = s.toString();
                            Object tag = amount.getTag(R.id.amount);
                            Log.d("position",""+tag);

                            if(!editing) {
                                editing = true;
                                if (enteredAmount.length() > 0) {
                                    try {
                                        final int amountselected = Integer.parseInt(enteredAmount);
                                        product.setCategoryName(productCategory.getName());
                                        product.setSubcategoryName(productCategory.getName());
                                        Log.i("cat name ",""+product.getCategoryName());
                                        product.setSelectedQty(amountselected);
                                        if (product.getCustomerType().equals(RETAILERLABEL)) {
                                            Log.d("Prodyct Adapter ",product.getProductName());
                                            clickListener.onItemClick(childPosition, amount, "plus", product.getRrp(), amountselected, product);
                                        } else {
                                            Log.d("Prodyct Adapter ",product.getProductName());
                                            clickListener.onItemClick(childPosition, amount, "plus", product.getDrp(), amountselected, product);

                                        }

                                    }catch(Exception ex){
                                        ex.printStackTrace();
                                    }

                                } else {
                                    InputMethodManager imm = (InputMethodManager) convertView.getContext()
                                            .getSystemService(Context.INPUT_METHOD_SERVICE);
                                    imm.hideSoftInputFromWindow(convertView.getWindowToken(), 0);
                                    amount.getText().clear();
                                    amount.append("");

                                }

                                editing = false;

                            }

                        }

                    });
                    if (productAvailable != null) {
                        product.setSelectedQty(productAvailable.getSelectedQty());
                        tvProductQty.setText("" + productAvailable.getSelectedQty());
                        amount.setText("" + productAvailable.getSelectedQty());
                        Log.i("qty", "" + productAvailable.getSelectedQty());
                    } else {
                        tvProductQty.setText("0");
                        product.setSelectedQty(0);
                        amount.setText("0");
                        if (product.getSelectedQty() == 0) {
                            Log.i("productname in Adapter:",""+product.getProductName());
                            Log.i("productQty in Adapter:",""+product.getSelectedQty());
                            llAdditem.setVisibility(View.GONE);
                            btnAdd.setVisibility(View.VISIBLE);
                        }
                    }
                }

                if (product.getCustomerType().equals(RETAILERLABEL)) {
                    String s = parent.getResources().getString(R.string.rupeeSymbol) +" "+product.getRrp();
                    tvCost.setText(s.trim());
                } else {
                    String s = parent.getResources().getString(R.string.rupeeSymbol) +" "+product.getDrp();
                    tvCost.setText(s.trim());
                }

                tvProductQty.setText("" + product.getSelectedQty());

                if (product.getSelectedQty() >= 1) {
                    btnAdd.setVisibility(View.INVISIBLE);
                    llAdditem.setVisibility(View.VISIBLE);
                } else {
                    Log.i("TAG", "Called Child Position" + childPosition + " And Quantity is " + product.getSelectedQty());
                    llAdditem.setVisibility(View.INVISIBLE);
                    btnAdd.setVisibility(View.VISIBLE);

                }

                btnAdd.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        btnAdd.setVisibility(View.GONE);
                        llAdditem.setVisibility(View.VISIBLE);
                        product.setSelectedQty(1);
                        product.setSubcategoryName(productCategory.getName());
                        Log.i("Add Button Clicked", tvProductQty.getText().toString());

                    }
                });


                final ImageView imgDecreaseQty = inflate.findViewById(R.id.img_decreaseQty);
                ImageView imgIncreaseQty = inflate.findViewById(R.id.img_increaseQty);


                imgIncreaseQty.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        llAdditem.setVisibility(View.VISIBLE);
                        btnAdd.setVisibility(View.GONE);
                        String s = tvProductQty.getText().toString();
                        int qty = Integer.parseInt(s) + 1;
                        product.setSelectedQty(qty);
                        tvProductQty.setText("" + qty);

                    }
                });

                imgDecreaseQty.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String s = tvProductQty.getText().toString();
                        int qty = Integer.parseInt(s);
                        if(product.getSelectedQty()>=1) {
                            if (qty > 1) {
                                qty = qty - 1;
                                tvProductQty.setText("" + qty);
                                product.setSelectedQty(qty);
                            } else if (qty == 1) {
                                llAdditem.setVisibility(View.GONE);
                                btnAdd.setVisibility(View.VISIBLE);
                                qty = 0;
                                product.setSelectedQty(qty);
                                tvProductQty.setText("" + qty);
                            }
                     }
                    }

                });
            } else {
                LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflate = layoutInflater.inflate(R.layout.empty_layout, null);
            }

        }

        return inflate;
    }

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



    public void setOnItemClickListener(ClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public interface ClickListener {
        void onItemClick(int position, View v, String type, double price, int quantity, Product product);
    }
}

0 个答案:

没有答案