android ExpandableListView中Spinner等抢焦点等组件的处理

       在用到ExpandableListView时,很多情况下会在父视图或者子视图中增加下拉框或者单选框,而往往增加之后会发现父视图不能点击了,即不能展开了,
    效果将会这样,点击父视图不能展开
    
                           
    
    怎么办呢?后来发现ExpandableListView有个expandGroup方法,那就可以通过其他事件来调用expandGroup以展开或收缩,ok,知道了原理,下面看代码
    
    activity_main.xml
   
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ExpandableListView
        android:id="@+id/expandableListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:groupIndicator="@null" >
    </ExpandableListView>

</RelativeLayout>



MainActivity.java
public class MainActivity extends Activity
{

    private ExpandableListView expandableListView;
    private String[] group_tv = { "未执行", "已执行" };
    private String[] spinner = { "08:30-09:30", "09:30-09:30", "09:30-10:30" };
    private String[][] child_tv = { { "测试数据", "测试数据", "测试数据", "测试数据" }, { "测试数据", "测试数据", "测试数据", "测试数据" } };
    private ArrayAdapter adapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, spinner);

        expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        expandableListView.setAdapter(new ExpandableListAdapter());
    }

    class ExpandableListAdapter extends BaseExpandableListAdapter
    {

        @Override
        public int getGroupCount()
        {
            return group_tv.length;
        }

        @Override
        public int getChildrenCount(int groupPosition)
        {
            return child_tv[groupPosition].length;
        }

        @Override
        public String getGroup(int groupPosition)
        {
            return group_tv[groupPosition];
        }

        @Override
        public String getChild(int groupPosition, int childPosition)
        {
            return child_tv[groupPosition][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;
        }

        @Override
        public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, ViewGroup parent)
        {
            GroupHolder groupHolder = null;
            if (convertView == null)
            {
                groupHolder = new GroupHolder();
                convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.group, null);
                groupHolder.groupTv = (TextView) convertView.findViewById(R.id.groupTv);
                groupHolder.groupSpinner = (Spinner) convertView.findViewById(R.id.groupSpinner);
                convertView.setTag(groupHolder);
            } else
            {
                groupHolder = (GroupHolder) convertView.getTag();
            }
            ((ImageView) convertView.findViewById(R.id.pro_logo)).setImageResource(isExpanded ? R.drawable.hosp_pro_open : R.drawable.hosp_pro_close);
            groupHolder.groupTv.setText(group_tv[groupPosition]);
            groupHolder.groupSpinner.setAdapter(adapter);

            LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.groupExpand);
            layout.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    if (isExpanded)
                    {
                        expandableListView.collapseGroup(groupPosition);
                    } else
                    {
                        expandableListView.expandGroup(groupPosition);
                    }
                }
            });

            return convertView;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
        {
            ChildHolder childHolder = null;
            if (convertView == null)
            {
                childHolder = new ChildHolder();
                convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.child, null);
                childHolder.childTv = (TextView) convertView.findViewById(R.id.childTv);
                childHolder.childSpinner = (Spinner) convertView.findViewById(R.id.childSpinner);
                convertView.setTag(childHolder);
            } else
            {
                childHolder = (ChildHolder) convertView.getTag();
            }

            childHolder.childTv.setText(child_tv[groupPosition][childPosition]);
            childHolder.childSpinner.setAdapter(adapter);
            return convertView;
        }

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

        class GroupHolder
        {
            TextView groupTv;
            Spinner groupSpinner;
        }

        class ChildHolder
        {
            TextView childTv;
            Spinner childSpinner;
        }
    }

}


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:layout_height="50.0dp"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/groupExpand"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/pro_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/hosp_pro_close" />

        <TextView
            android:id="@+id/groupTv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="未执行" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_vertical|right"
        android:paddingRight="5.0dp" >

        <Spinner
            android:id="@+id/groupSpinner"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </LinearLayout>

</LinearLayout>



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:layout_height="30.0dp"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/childTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="测试数据" />

    <Spinner
        android:id="@+id/childSpinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="right" />

</LinearLayout>


 OK,下面来看看效果

        

  关于ExpandableListView的用法可看之前说过的 http://my.oschina.net/helu/blog/141739

  我的博客其它文章列表
  http://my.oschina.net/helu

转载于:https://my.oschina.net/helu/blog/143892

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值