我在Android Studios上用XML实现了卡片视图。我怎么能把这个按钮作为按钮?

时间:2017-12-04 21:36:01

标签: java android android-fragments android-cardview

我是Android新手,最近为我的应用创建了一个信息中心。我遵循了一个教程,但它只涵盖了前端。我创建了一个名为 content_main.xml 的布局,其中包含三个Cardview。这些Cardview中的每一个都包含代码

android:clickable="true"

从事情的后端开始,我创建了一个名为 DashboardActivity 的java接收器类(如下所示)。我想让我的Cardviews可点击,以便在点击一个时,我被带到我的应用程序中的另一个屏幕。我试图访问的应用程序中的其他屏幕是碎片。这些屏幕中的每一个都在我的" Fragments"中有自己的java类。夹。其中一个,我在后面的代码中尝试调用,称为 SettingsViewFragment()

到目前为止,我已经尝试了以下内容。它什么都不做。

public class DashboardActivity  extends AppCompatActivity {

    CardView cd1, cd2, cd3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);
        cd1 = (CardView) findViewById(R.id.dash_settings);
        cd2 = (CardView) findViewById(R.id.dash_profile);
        cd3 = (CardView) findViewById(R.id.dash_activity);

        cd1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fragment1 = new SettingsViewFragment();
            }

        });
    }
}

更新:完整代码

public class DashboardActivity extends AppCompatActivity {

    CardView cd1, cd2, cd3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);

        cd1 = findViewById(R.id.dash_settings);
        cd2 = findViewById(R.id.dash_profile);
        cd3 = findViewById(R.id.dash_activity);

        cd1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Log.i("Testing 123 123 123");
            }

        });

    }
}

我的XML :(以这种方式继续使用3张卡片)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.newproject.DashboardActivity"
    tools:showIn="@layout/toolbar">


    <FrameLayout
        android:id="@+id/dashframe"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <LinearLayout
        android:clipToPadding="false"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <android.support.v7.widget.CardView
            android:id="@+id/dash_settings"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="160dp"
            android:layout_height="190dp"
            android:layout_margin="10dp">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:gravity="center">
                <ImageView
                    android:layout_width="64dp"
                    android:layout_height="64dp"
                    android:background="@drawable/bg_circle1"
                    android:src="@drawable/ic_settingspicture"
                    android:padding="10dp"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:layout_marginTop="10dp"
                    android:text="View your settings"/>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="@color/lightgray"
                    android:layout_margin="10dp"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="Follow along with guided tutorials"
                    android:padding="5dp"
                    android:textColor="@android:color/darker_gray"/>

            </LinearLayout>

3 个答案:

答案 0 :(得分:1)

替换

Fragment fragment1 = new SettingsViewFragment();

有了这个

Fragment fragment1 = new SettingsViewFragment();
FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.Main_Layout,fragment1);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();

答案 1 :(得分:0)

Fragment fragment1 = new SettingsViewFragment ();

更改Toast.makeText (mActivity, "onCLick", Toast.LENGTH_LONG) .show ();

//如果show toast问题不在于onClick,问题在于加载片段

答案 2 :(得分:0)

应使用newInstance()静态方法实例化片段。

cd1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment settingsFragment = SettingsFragment.newInstance();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.contentView, settingsFragment);
        fragmentTransaction.commit();
    }

});

在SettingsFragment

 public static SettingsFragment newInstance() {
            return new SettingsFragment();
 }

content_main的XML

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:id="@+id/dash_settings"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        ...

     </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
        android:id="@+id/dash_profile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        ...

        </android.support.v7.widget.CardView>

      <android.support.v7.widget.CardView
        android:id="@+id/dash_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        ...

        </android.support.v7.widget.CardView>

    <FrameLayout
        android:id="@+id/contentView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
    </FrameLayout>

</LinearLayout>

这会将片段交易到位于CardViews下方的FrameLayout。现在这可能不太理想,你很可能想要发布一个新的活动来托管片段,但这应该有效。除非这已存在于托管片段的某些Activity中。但关键代码在onClick