Android可扩展菜单项

时间:2018-05-14 23:06:32

标签: java android

我正在尝试设计一个菜单,您可以在其中将社交媒体帐户与我的应用相关联。为此,我想要一个菜单​​列出所有可访问的社交媒体应用程序。 例如:

  • 微博
  • 的Youtube
  • 等。

要连接到您的帐户,您可以点击其中一个菜单项,并显示个别“内容”。我找到了一种类似于魅力的方法,但会产生巨大的代码重载,如下所示:

 // Twitter
    btn_login_twitter = view.findViewById(R.id.twitter_login_btn);
    img_ca_twitter_expand = view.findViewById(R.id.ca_twitter_expand);
    fl_ca_twitter_content = view.findViewById(R.id.ca_twitter_content_layout);
    fl_ca_twitter_header = view.findViewById(R.id.ca_twitter_header);
    fl_ca_twitter_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_twitter_content.getVisibility()== View.VISIBLE) fl_ca_twitter_content.setVisibility(View.GONE);
            else fl_ca_twitter_content.setVisibility(View.VISIBLE);
            img_ca_twitter_expand.animate().rotation(img_ca_twitter_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();
        }
    });
    // Facebook
    btn_login_facebook = view.findViewById(R.id.facebook_login_btn);
    fl_ca_facebook_content = view.findViewById(R.id.ca_facebook_content_layout);
    img_ca_facebook_expand = view.findViewById(R.id.ca_facebook_expand);
    fl_ca_facebook_header = view.findViewById(R.id.ca_facebook_header);
    fl_ca_facebook_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_facebook_content.getVisibility() == View.VISIBLE) fl_ca_facebook_content.setVisibility(View.GONE);
            else fl_ca_facebook_content.setVisibility(View.VISIBLE);
            img_ca_facebook_expand.animate().rotation(img_ca_facebook_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();


        }
    });

    //Youtube
    fl_ca_youtube_content = view.findViewById(R.id.ca_youtube_content_layout);
    fl_ca_youtube_header = view.findViewById(R.id.ca_youtube_header);
    img_ca_youtube_expand = view.findViewById(R.id.ca_youtube_expand);
    fl_ca_youtube_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (fl_ca_youtube_content.getVisibility() == View.VISIBLE) fl_ca_youtube_content.setVisibility(View.GONE);
            else fl_ca_youtube_content.setVisibility(View.VISIBLE);
            img_ca_youtube_expand.animate().rotation(img_ca_youtube_expand.getRotation() == 0 ? 180 : 0).setDuration(500).start();


        }
    });

正如您在此处所看到的,每个应用程序的代码几乎相同。只有属性的名称会随着应用程序的更改而更改。 这是现在的样子截图 Social Media Expandable List

xml文件中的相同问题:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ca_scrollview_layout"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/ca_twitter_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_twitter_color"
        android:outlineProvider="bounds">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center_horizontal"
            android:text="Twitter"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:id="@+id/ca_twitter_expand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_twitter_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_twitter_layout" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/ca_facebook_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_facebook_color">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center_horizontal"
            android:text="Facebook"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:id="@+id/ca_facebook_expand"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_facebook_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_facebook_layout" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/ca_youtube_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/about_youtube_color">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical|center_horizontal"
            android:text="Youtube"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

        <ImageView
            android:id="@+id/ca_youtube_expand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            app:srcCompat="@drawable/baseline_keyboard_arrow_down_black_48" />
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ca_youtube_content_layout"
        android:visibility="gone">
        <include layout="@layout/connect_youtube_layout" />
    </FrameLayout>




</LinearLayout>

有没有更好的方法来解决我的问题?我觉得这个不太好。

1 个答案:

答案 0 :(得分:0)

您可以通过为可点击项目提供单个OnClickListener来改进代码。有关详细说明,请查看此post