Android,可扩展列表视图项目焦点问题

时间:2016-07-18 07:22:39

标签: android android-layout android-fragments expandablelistview

我有一个可扩展的列表视图。我已经放了一些数据,一切似乎都没问题,但是当我点击未显示的组textviews子视图时,我在组布局中有三个textview,当点击listview子视图成功显示的其他区域时。

我认为我在 textview焦点中遇到了问题,但我尝试从textview中删除焦点,但我失败了。

This is the screenshot. 在我的截图定义中,当我点击蓝色轮廓区域列表视图点击事件不工作但当我点击红色轮廓区域完全点击和子视图显示。 我该如何解决点击问题。

提前致谢。

这是我的代码。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/container"
android:descendantFocusability="beforeDescendants"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

 <ExpandableListView
    android:id="@+id/lvExp"
    android:layout_height="wrap_content"
    android:groupIndicator="@null"
    android:divider="@color/divider"
    android:dividerHeight="1dp"
    android:layout_width="wrap_content"/>

</RelativeLayout>

View_Group.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:focusableInTouchMode="false"
    android:focusable="false"
    android:descendantFocusability="blocksDescendants">

    <LinearLayout
        android:id="@+id/llOrderFooter"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@color/baseWhite"
        android:orientation="vertical"
        android:padding="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:paddingBottom="3dp"
            android:paddingLeft="2dp"
            android:paddingRight="2dp">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"

                android:orientation="vertical"
                android:gravity="center_horizontal|center_vertical"
                android:layout_weight="0">

                <ImageView
                    android:id="@+id/ivvegIndicator"
                    android:layout_width="6dp"
                    android:layout_height="6dp"
                    android:background="@drawable/green_circle"
                   />

                <ImageView
                    android:id="@+id/ivNonVegIndicator"
                    android:layout_width="6dp"
                    android:layout_height="6dp"

                    android:background="@drawable/red_circle" />
            </RelativeLayout>

            <com.entree.entree.views.RobottowCondenced
                android:id="@+id/foodName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="textNoSuggestions|textMultiLine"
                android:gravity="start|center_vertical"
                android:textIsSelectable="false"
                android:textSize="16sp"
                android:text="FOODNAME"
                android:textColor="#000"
                android:singleLine="false"
                android:enabled="false"
                android:layout_marginLeft="5dp" />

            <com.entree.entree.views.RobottowCondenced
                android:id="@+id/foodPrice"
                android:layout_width="wrap_content"
                android:text="PRICE"
                android:layout_weight="1"
                android:textSize="16sp"
                android:textIsSelectable="false"
                android:enabled="false"
                android:layout_height="wrap_content"
                android:gravity="end|center_vertical"
                android:textColor="#000" />


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="2dp"

            android:paddingRight="2dp">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp"
                android:orientation="vertical"


                android:gravity="center_horizontal|center_vertical"
                android:visibility="invisible">

                <ImageView
                    android:id="@+id/imageView4"
                    android:layout_width="6dp"
                    android:layout_height="6dp"

                    android:background="@drawable/green_circle" />

                <ImageView
                    android:id="@+id/imageView7"
                    android:layout_width="6dp"
                    android:layout_height="6dp"
                    android:layout_marginTop="4dp"

                    android:background="@drawable/red_circle" />
            </LinearLayout>

            <com.entree.entree.views.RobottowCondencedLight
                android:id="@+id/foodDesc"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_marginTop="5dp"
                android:textColor="@color/baseDark"
                android:textSize="14sp"
                android:enabled="false"
                android:text="grtgrtgrtgrtgrtgrtgdscdscsdcdscdscsrtgrtgrtgrtg5htyjnsrtg5hqegrtertgertg"
                android:textIsSelectable="false"

                android:inputType="textNoSuggestions|textMultiLine"
                android:lines="3"

                android:layout_marginLeft="5dp"
                android:layout_weight="1.06" />

            <com.entree.entree.views.RobottowCondencedLight
                android:id="@+id/qty"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="end|right"
                android:gravity="end|right"
                android:textStyle="bold"
                android:paddingStart="10dp"
                android:paddingEnd="10dp"
                android:paddingTop="7dp"
                android:paddingBottom="7dp"
                android:enabled="false"

                android:textIsSelectable="false"
                android:textColor="@color/baseDark"
                android:textSize="14sp"
                android:visibility="visible"

                android:layout_weight="0.17"
                android:layout_marginLeft="10dp" />

        </LinearLayout>


    </LinearLayout>

</LinearLayout>

View_Child.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/llAddFood"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/LightGreen"
        android:visibility="visible"
        android:weightSum="3"

        android:orientation="vertical">

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/baseWhite"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btnCancel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:text="Customize"
                android:textColor="@color/baseWhite"
                android:gravity="center_vertical|center_horizontal"
                android:textSize="14dp"

                android:textStyle="bold"
                android:layout_marginTop="-2dp"
                android:layout_marginBottom="2dp"/>

            <View
                android:layout_width="1dp"
                android:layout_height="wrap_content"
                android:background="@color/baseWhite"/>

            <Button
                android:id="@+id/btnRemoveFood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:text="-"
                android:textColor="@color/baseWhite"
                android:gravity="center_vertical|center_horizontal"
                android:textSize="20dp"

                android:textStyle="bold" />

            <View
                android:layout_width="1dp"
                android:layout_height="wrap_content"
                android:background="@color/baseWhite"></View>

            <Button
                android:id="@+id/btnAddFood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:text="+"
                android:textColor="@color/baseWhite"
                android:textSize="20dp"
                android:gravity="center_vertical|center_horizontal"
                android:textStyle="bold" />
        </LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/baseWhite"/>
    </LinearLayout>

</LinearLayout>

FoodListAdapter.class

 public class FoodExpandableListAdapter 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;

    private Context mContext;
    private ArrayList<Food> arrFood = new ArrayList<Food>();
    private LayoutInflater inflater;
    private FoodChangeListener fcListener;
    private Restaurant resObj;


    public FoodExpandableListAdapter(Context mContext, ArrayList<Food> arrFood, Restaurant resObj) {
        this.mContext = mContext;
        this.arrFood = arrFood;
        this.resObj = resObj;
        this.inflater = LayoutInflater.from(mContext);
    }

    public FoodExpandableListAdapter(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 0;
    }

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

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {



        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) mContext
                    .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.viewfooter, null);
        }

        Button AddButton=(Button)convertView.findViewById(R.id.btnAddFood);
        Button RemoveButton=(Button)convertView.findViewById(R.id.btnRemoveFood);

        AddButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext,groupPosition+"Add",Toast.LENGTH_LONG).show();
            }
        });

        RemoveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext,groupPosition+"Remove",Toast.LENGTH_LONG).show();
            }
        });
       /* TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);

        txtListChild.setText(childText);*/
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return 1;
    }

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

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

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



    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        final Food food = arrFood.get(groupPosition);
        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
          /*  LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);*/

            convertView = inflater.inflate(R.layout.viewheader, null);


            convertView.setTag(holder);

        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.foodName = (RobottowCondenced) convertView.findViewById(R.id.foodName);
        holder.foodPrice = (RobottowCondenced) convertView.findViewById(R.id.foodPrice);
        holder.foodDesc = (RobottowCondencedLight) convertView.findViewById(R.id.foodDesc);
        holder.foodquantity = (RobottowCondencedLight) convertView.findViewById(R.id.qty);
        holder.llOrderFooter = (LinearLayout) convertView.findViewById(R.id.llOrderFooter);
        holder.vegOnly = (ImageView) convertView.findViewById(R.id.ivvegIndicator);
        holder.VetnNonVeg = (ImageView) convertView.findViewById(R.id.ivNonVegIndicator);


        holder.foodName .setFocusable(false);
        holder.foodDesc .setFocusable(false);
        holder.foodDesc.setFocusableInTouchMode(false);
        holder.foodName.setFocusableInTouchMode(false);

        holder.foodName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "Cilck", Toast.LENGTH_LONG).show();
            }
        });

        holder.foodPrice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "Cilck", Toast.LENGTH_LONG).show();
            }
        });

        if ((groupPosition % 2) == 0) {
            holder.llOrderFooter.setBackgroundColor(Color.parseColor("#4dc4c4c4"));
        } else {
            holder.llOrderFooter.setBackgroundColor(Color.parseColor("#f7f7f9"));
        }



        if (food.getVegOnly().equalsIgnoreCase("Y")) {
            holder.vegOnly.setVisibility(View.VISIBLE);
            holder.VetnNonVeg.setVisibility(View.GONE);
        } else {
            holder.VetnNonVeg.setVisibility(View.VISIBLE);
            holder.vegOnly.setVisibility(View.GONE);
        }

        holder.foodName.setText(food.getFoodName());
        holder.foodDesc.setText(food.getFoodDesc());
        holder.foodPrice.setText(mContext.getResources().getString(R.string.Rs) + " " + String.valueOf(food.getPrice()));




        return convertView;
    }

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



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


    public void setOnDataChangeListener(FoodChangeListener onDataChangeListener) {
        fcListener = onDataChangeListener;
        int price = calculateTotalCost();
        if (fcListener != null)
            fcListener.onDataChanged(price);
    }
    private int calculateTotalCost() {
        int price = 0;
        for (OrderItem item : EntreeApplication.arrUserOtderItems) {
            price = price + item.getItemTotal();
        }
        return price;
    }
    public class ViewHolder {
        RobottowCondenced foodName;
        RobottowCondencedLight foodDesc;
        RobottowCondenced foodPrice;
        ImageView foodImage;
        FrameLayout ffFoodContent;
        LinearLayout llAddFood, llOrderFooter;
        Button btnRemoveFood;
        Button btnAddFood;
        Button btnCancel;
        LinearLayout llFoodFooter;
        ImageView vegOnly, VetnNonVeg;
        RobottowCondencedLight foodquantity;
    }
    }

0 个答案:

没有答案