java - 从可绘制菜单中打开一个新活动
问题描述
所以我试图从可绘制菜单中打开一个新活动。我想从“家”活动到“欢迎”活动。这是我所做的:
编辑:所以我从我的 xml 文件中更改了顺序,但没有解决问题。我更改了 3 篇文章中的一篇中提出的首选项设置,这可能与我的问题相似,但也没有用(反正它们已经没问题了)。我在 Home.class 中更新了更多信息。也许我在那里做错了什么?
这是我的家庭活动:
package com.example.padmw;
import android.content.ClipData;
import android.content.Intent;
import android.os.Bundle;
import com.example.padmw.Common.Common;
import com.example.padmw.Interface.ItemClickListener;
import com.example.padmw.Model.Category;
import com.example.padmw.ViewHolder.MenuViewHolder;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import android.view.MenuItem;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import androidx.fragment.app.FragmentTransaction;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.Menu;
import android.widget.TextView;
public class Home extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private AppBarConfiguration mAppBarConfiguration;
FirebaseDatabase database;
DatabaseReference category;
TextView txtFullName;
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("Menu");
setSupportActionBar(toolbar);
//Firebase
database = FirebaseDatabase.getInstance();
category = database.getReference("Category");
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Coming soon!", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
//Name for user
View headerView = navigationView.getHeaderView(0);
txtFullName = (TextView) headerView.findViewById(R.id.txtFullName);
txtFullName.setText(Common.currentUser.getName());
//Load Menu
recycler_menu = (RecyclerView) findViewById(R.id.recycler_menu);
recycler_menu.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recycler_menu.setLayoutManager(layoutManager);
loadMenu();
}
private void loadMenu() {
adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(Category.class, R.layout.menu_item, MenuViewHolder.class, category) {
@Override
protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) {
viewHolder.txtNameMenu.setText(model.getName());
Picasso.get().load(model.getImage())
.into(viewHolder.imageView);
final Category clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
//Get CategoryId and sed it to NewActivity
Intent foodList = new Intent(Home.this, FoodList.class);
foodList.putExtra("CategoryId", adapter.getRef(position).getKey());
startActivity(foodList);
}
});
}
};
recycler_menu.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
startActivity(new Intent(Home.this, SettingsActivity.class));
return true;
}
return super.onContextItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.nav_video) {
startActivity(new Intent(Home.this, Welcome.class));
}else if (id==R.id.nav_log_out){
startActivity(new Intent(Home.this, MainActivity.class));
}
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
}
这是我的欢迎活动:
public class Welcome extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
if(findViewById(R.id.welcome_container)!= null)
{
if(savedInstanceState !=null)
return;
getSupportFragmentManager()
.beginTransaction().add(R.id.welcome_container,new WelcomeFragment()).commit();
}
}
}
这是 WelcomeFragment.java:
public class WelcomeFragment extends Fragment {
public WelcomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_welcome, container, false);
}
}
我的问题是,当我单击该项目时,实际上没有任何反应。什么地方出了错?如果你想让我添加布局,请在下面评论。
编辑:我的 activity_home 文件(res\layout\activity_home.xml):
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@drawable/background"
tools:openDrawer="start">
<include
layout="@layout/app_bar_home"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:background="@color/colorPrimaryDark"
app:itemTextColor="@android:color/white"
app:itemIconTint="@android:color/white"
app:headerLayout="@layout/nav_header_home"
app:menu="@menu/activity_home_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
这是我的 activity_home_drawer 文件(res\menu\activity_home_drawer):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_video"
android:icon="@drawable/ic_ondemand_video_black_24dp"
android:iconTint="@android:color/white"
android:title="@string/ItemTitle_5"
tools:targetApi="o"
/>
<item
android:id="@+id/nav_menu"
android:icon="@drawable/ic_restaurant_black_24dp"
android:iconTint="@android:color/white"
android:title="@string/ItemTitle_1"
tools:targetApi="o"/>
<item
android:id="@+id/nav_cart"
android:icon="@drawable/ic_shopping_cart_black_24dp"
android:iconTint="@android:color/white"
android:title="@string/ItemTitle_2"
tools:targetApi="o" />
<item
android:id="@+id/nav_order"
android:icon="@drawable/ic_access_time_black_24dp"
android:iconTint="@android:color/white"
android:title="@string/ItemTitle_3"
tools:targetApi="o"/>
<item
android:id="@+id/nav_log_out"
android:icon="@drawable/ic_exit_to_app_black_24dp"
android:iconTint="@android:color/white"
android:title="@string/ItemTitle_4"
tools:targetApi="o"/>
</group>
</menu>
解决方案
推荐阅读
- flutter - 如何缩放PDF文件并在颤动中截取缩放区域的屏幕截图
- python - AWS Cognito 创建允许多次删除和创建的测试用户
- powershell - 在 PowerShell 中捕获错误代码并跳过命令
- file - 写入文件时,OpenOptions write 无法正常工作
- xcode - pod install 上的重复包
- java - 将字符串数组列表内的字符串元素隐藏为int?(爪哇)
- jenkins - Jenkins - Gitlab 集成如何仅构建 MR 的源分支?
- react-native - 地理围栏,如果应用程序终止,本地通知可以在用户到达公司时推送
- php - 包含日期之间的php碳
- laravel - 获取 vue prop 数组中的最后 X 个项目