Android studio 为什么按钮在我的应用程序中的片段中不起作用?

Android studio 为什么按钮在我的应用程序中的片段中不起作用?,android-studio,Android Studio,我正在尝试制作一个带有骰子滚轮的应用程序,它编译的片段没有错误,但是按钮没有做任何事情 公共类DashboardFragment扩展了片段{ 专用仪表板视图模型仪表板视图模型; 私人按钮骰子; 公共静态最终随机=新随机(); 私有ImageView imageView1、imageView2; 私有ImageView imageDice1、imageDice2; @可空 创建视图时的公共视图(@Nullable ViewGroup container、@NonNull LayoutInflate

我正在尝试制作一个带有骰子滚轮的应用程序,它编译的片段没有错误,但是按钮没有做任何事情

公共类DashboardFragment扩展了片段{
专用仪表板视图模型仪表板视图模型;
私人按钮骰子;
公共静态最终随机=新随机();
私有ImageView imageView1、imageView2;
私有ImageView imageDice1、imageDice2;
@可空
创建视图时的公共视图(@Nullable ViewGroup container、@NonNull LayoutInflater inflater、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_仪表板,容器,错误);
rollDices=(按钮)view.findViewById(R.id.rollDices);
imageView1=(ImageView)view.findViewById(R.id.imageView4);
imageView2=(ImageView)view.findViewById(R.id.imageView3);
imageDice1=(ImageView)view.findViewById(R.id.imageDice);
imageDice2=(ImageView)view.findViewById(R.id.imageDice2);
rollDices.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
int value1=randomDiceValue();
int value2=randomDiceValue();
int value3=randomDiceValue();
int value4=randomDiceValue();
int res1=getResources().getIdentifier(“d_”+value3,“drawable”,“com.example.prueba2”);
int res2=getResources().getIdentifier(“d_”+value4,“drawable”,“com.example.prueba2”);
int res3=getResources().getIdentifier(“dice_u3;”+value1,“drawable”,“com.example.prueba2”);
int res4=getResources().getIdentifier(“dice_u2;”+value2,“drawable”,“com.example.prueba2”);
imageView1.setImageResource(res1);
imageView2.setImageResource(res2);
imageDice1.setImageResource(res3);
imageDice2.setImageResource(res4);
}
公共int值(){
返回RANDOM.nextInt(6)+1;
}
});
返回视图;
}

您可以这样做:

Fragment.java:

导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.ImageView;
导入androidx.fragment.app.fragment;
导入java.util.Random;
公共类BlankFragment扩展了Fragment
{
公共静态最终随机=新随机();
私人按钮;
私有图像视图dice1、dice2;
@凌驾
创建视图上的公共视图(更平坦的充气机,
视图组容器,
捆绑存储状态
)
{
视图=充气机。充气(R.layout.fragment\u blank,container,false);
按钮=视图.findViewById(R.id.button\u roll);
dice1=view.findViewById(R.id.dice1);
dice2=view.findViewById(R.id.dice2);
setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
掷骰子(骰子1);
掷骰子(骰子2);
}
});
返回视图;
}
私有无效滚动骰子(ImageView ImageView)
{
int val=RANDOM.nextInt(2);
Log.d(“Fragment”,“OnClickMethod.Value:”+val);
开关(val)
{
案例0:
{
setImageResource(R.drawable.ic_launcher_后台);
打破
}
案例1:
{
setImageResource(R.drawable.ic_launcher_前台);
打破
}
}
}
}
在这里,我没有得到带有
getIdentifier
的图像资源,只是将其设置为开关大小写。我认为这更容易。(当然,我的范围是2。您必须将其设置为6并更改为正确的图像。这只是一个示例)

如果您想在示例项目中检查它,那么可以使用其他类

fragment.xml:


activity.xml


activity.java:

导入android.os.Bundle;
导入androidx.appcompat.app.appcompat活动;
导入androidx.fragment.app.FragmentManager;
导入androidx.fragment.app.FragmentTransaction;
公共类MainActivity扩展了AppCompatActivity
{
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager=getSupportFragmentManager();
FragmentTransaction=manager.beginTransaction();
transaction.replace(R.id.root,newblankfragment()).commit();
}
}

谢谢,这对其中一个骰子有效,但我在让其他骰子工作时遇到了麻烦,每个
ImageView
应该有4个骰子,无论你有1个还是4个都可以。为了更简单:创建一个函数,它接受
ImageView
。在这个函数中粘贴这个
开关盒
代码,然后更改i然后在
onClick
方法中,只需为每个
ImageView
调用此函数,我很抱歉,但我不知道该怎么做你能给我看一下那部分代码吗?比如4dices@RodrigoBarrantes我已经编辑了我的答案。我添加了2个
ImageView
,它们正在随机改变状态。我你觉得这对你有用吗