我是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>
答案 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
。