修炼之路 2018-06-04 15:08 采纳率: 0%
浏览 2325
已结题

ListView中因layout_height是wrap_content而引发的问题

问题描述:
先是点击画面上的一个按钮,然后出现下方弹窗
图一:点击弹窗内的“show preview”,会出现listview,如图二
图一:点击弹窗内的“show preview”,会出现listview,如图二
图二:listview出现之后,快速点击任意item,按照设计应该是出现图一的画面
图二:listview出现之后,快速点击任意item,按照设计应该是出现图一的画面
但是实际上出现的是图三的画面,
图三:图中出现了和listview大小一样的透明层
图三:图中出现了和listview大小一样的透明层
这种现象只会在listview初始化的时候并且是快速点击下才会出现,往后怎么点击都不会出现。
现在怀疑这个问题可能是因为ListView中的layout_height是wrap_content而引发的问题,改成具体fill_parem或者是具体的高度就能够解决,但是要怎么证明这个现象是由这个问题导致的呢?
代码如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/flipper_setting"
    android:layout_width="fill_parent"
    android:layout_height="400px"
    android:orientation="vertical"
    android:gravity="center_vertical"
    android:background="@color/gold"

    >

    <!-- setting category page -->
    <LinearLayout
        android:id="@+id/layout1"
        android:layout_width="fill_parent"
        android:layout_height="400px"
        android:gravity="top"
        android:orientation="vertical">

        <!-- Preview Setting -->
        <include
            android:id="@+id/include_setting_preview"
            layout="@layout/list_row_setting_category" />

    </LinearLayout>

    <!-- detail setting page -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="400px"
        android:gravity="top"
        android:orientation="vertical"
        android:id="@+id/layout2">
        <TextView
            android:id="@+id/text_title_detail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textSize = "20px"/>
        <com.example.viewflippertest.ListViewConfig
            android:id="@+id/listview_detail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/white" />

    </LinearLayout>

 </LinearLayout>

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.id_btn) ;
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Dialog dialog = createOtherSettingDialog(MainActivity.this);
                dialog.show();
                WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
                lp.width = 600;
                lp.height = 500;
                dialog.getWindow().setAttributes(lp);

            }
        });

    }


    public static AlertDialog createOtherSettingDialog(final Context context) {

        //(1)
        LayoutInflater inflater = LayoutInflater.from(context);
        final View view = inflater.inflate(R.layout.dlg_setting_other, null);

        final ListViewConfig listView_detail = (ListViewConfig)view.findViewById(R.id.listview_detail);
        final TextView text_detail_title = (TextView)view.findViewById(R.id.text_title_detail);
        final LinearLayout layout2 = (LinearLayout) view.findViewById(R.id.layout2);
        final LinearLayout layout1 = (LinearLayout) view.findViewById(R.id.layout1);
        layout2.setVisibility(View.GONE);

        //(2)
        /*============ Preview Setting ================*/

        final LinearLayout layout_preview = (LinearLayout)view.findViewById(R.id.include_setting_preview);
        final ArrayAdapter<String> adapter_preview = new adaper(context, R.layout.list_row_setting_detail, R.id.text_detail);
        final TextView text_category_preview = (TextView)layout_preview.findViewById(R.id.text_category);
        final TextView text_value_preview = (TextView)layout_preview.findViewById(R.id.text_value);
        text_category_preview.setText(context.getString(R.string.txid_scan_b_other_preview_title));
        text_value_preview.setText("On");

        final List<String> list_preview = new ArrayList<String>();
        list_preview.add(0, "On");
        list_preview.add(1, "Off");
        for(int i=0; i<list_preview.size(); ++i) {
            adapter_preview.add(list_preview.get(i));
        }
        layout_preview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("========= layout_preview onclick");

                text_detail_title.setText(R.string.txid_scan_b_other_preview_title);
                listView_detail.setAdapter(adapter_preview);
                layout1.setVisibility(View.GONE);
                layout2.setVisibility(View.VISIBLE);


            }
        });

        /*===============================================*/

        //(3)
        listView_detail.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                System.out.println("========= listView_detail onclick");
                if(parent.getAdapter().equals(adapter_preview)) {
                    // Update preview setting
                    String value = adapter_preview.getItem(position);
                    TextView text_value = (TextView)layout_preview.findViewById(R.id.text_value);
                    text_value.setText(value);

                } else {
                    /* should never reach this point */
                }
                layout1.setVisibility(View.VISIBLE);
                layout2.setVisibility(View.GONE);
            }
        });

        //(4)
        final AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        dialog.setTitle(context.getString(R.string.txid_scan_t_top_other_title));
        dialog.setNegativeButton(context.getString(R.string.txid_cmn_b_close), null);
        dialog.setView(view);
        return dialog.create();
    }




    private static class adaper extends ArrayAdapter<String>{


        public adaper(Context context, int resource, int textViewResourceId) {
            super(context, resource, textViewResourceId);
            // TODO Auto-generated constructor stub
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            System.out.println("========= position:" + position + ",convertView:" + convertView +",parent:" + parent.getMeasuredHeight() +",parent.getChildCount:" + parent.getChildCount());
            return super.getView(position, convertView, parent);
        }

    }
  • 写回答

3条回答

  • devmiao 2018-06-04 15:09
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)