按下ICS和Jelly Bean中的首选项ListView(API 15/16)

时间:2016-04-22 14:04:06

标签: android listview

我使用以下布局加载首选项屏幕:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/export_main_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:attr/windowBackground"
    android:clickable="true">

    <ImageView
        android:id="@+id/export_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/entry_background" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/export_settings_list"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/export_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_file_upload_white_24"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:clickable="true"/>

</RelativeLayout>

RecyclerView是XML首选项文件膨胀的列表。其余的布局,FAB和ImageView,只是自定义首选项屏幕的补充。

所有这些都适用于最新的Android版本,但在ICS和Jelly Bean(我没有尝试过Kikat)上,FloatingActionButton无法接收任何点击并变得有点透明。

我尝试了十几种不同的东西(使用标准按钮,标准的lisview等),但按钮在屏幕上仍然无用,而是始终点击下面的列表项。

我认为问题可能来自于我为XML首选项文件充气这一事实,因为我使用标准列表创建了相同的布局,并且按钮在任何版本中都运行良好。

最糟糕的情况我只会加载旧版本的特定布局......

1 个答案:

答案 0 :(得分:1)

我实际上终于成功了。

在我的问题中,我正在添加XML中的按钮,但无法捕获点击事件。我终于改变了我的代码,并在布局中动态添加了按钮,并且它有效!

我仍然无法解释为什么在以编程方式添加按钮时可以点击,也许使用XML按钮仍然在列表下方...

无论如何这里是代码:

    final ViewGroup innerContainer = (ViewGroup) exportView.findViewById(R.id.export_main_frame);
    final View innerView = super.onCreateView(inflater, innerContainer, savedInstanceState);
    if (innerView != null) {
        innerContainer.addView(innerView);

        // Add dynamically the FAB to export
        FloatingActionButton dynamicExportFAB = new FloatingActionButton(getActivity());
        dynamicExportFAB.setImageResource(R.drawable.ic_file_upload_white_24);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        params.addRule(RelativeLayout.ALIGN_PARENT_END);

        dynamicExportFAB.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //TODO
            }
        });

        innerContainer.addView(dynamicExportFAB, params);
    }