我应该在视图的onclick方法中使用标记值吗?

kx1ctssn  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(255)

首先,我为这个糟糕的标题感到抱歉。我不知道该怎么表达我的问题,所以我要把事情弄清楚。
我正在尝试为我以前玩过的一款视频游戏制作一个android应用程序。游戏中的角色有多个插槽来装备他们库存中的物品,每个插槽都有许多可用的物品。我正在尝试做一个应用程序,你可以混合和匹配多个项目,并看到你的统计数据。每个项目槽都有一个imageview,当您单击一个项目时,它会显示一个对话框片段,列出该槽可能的项目。你只能使用一种类型的项目在每个插槽-基本上你不能把 Boot 在你的 Helm 槽-。为了确保viewmodel类只从sqlite数据库中获取正确类型的项,我在其构造函数中添加了一个“item type”参数:

public class EquipmentSelectViewModel extends AndroidViewModel {

private EquipmentRepository equipmentRepository;
private EquipmentType type;

public EquipmentSelectViewModel(@NonNull Application application, EquipmentType type) {
    super(application);
    equipmentRepository = new EquipmentRepository(application);
    this.type = type;
}

public LiveData<List<Equipment>> getEquipments() {
    return equipmentRepository.getEquipments(type);
}

为了传递所需的项类型,我在dialogfragment的newinstance()方法中添加了一个int参数:

public static EquipmentSelectDialog newInstance(int equipmentType) {
    EquipmentSelectDialog fragment = new EquipmentSelectDialog();
    Bundle args = new Bundle();
    args.putInt(EQUIPMENT_TYPE, equipmentType);
    fragment.setArguments(args);
    return fragment;
}

下面是我用来显示这个片段的方法,imageviews的onclick()方法调用这个方法。

private void showSelectDialog(int equipmentType) {
    FragmentManager fm = getFragmentManager();
    EquipmentSelectDialog fragment = EquipmentSelectDialog.newInstance(equipmentType);
    fragment.show(fm, "EquipmentSelectionDialog");
}

希望这能解决我的问题。最初,我使用if else语句根据imageview的id设置参数:

@Override
public void onClick(View v) {
    if (v instanceof ImageView) {
        if (v.getId() == R.id.imageView_amulet)
            showSelectDialog(EquipmentSelectDialog.AMULET);
        else if (v.getId() == R.id.imageView_ring1 || v.getId() == R.id.imageView_ring2)
            showSelectDialog(EquipmentSelectDialog.RING);
    }
}

这个方法工作得很好,但是有14个imageview,所以它很长,而且可能会让人困惑。在谷歌搜索之后,我想出了以下方法。首先,我创建一个资源文件,其中包含每个项目槽的专用整数:

<integer name="headSlotCode">1</integer>
<integer name="cloakSlotCode">2</integer>

我向每个imageview添加了一个标记,在layout的xml文件中使用正确的整数作为值:

<tag android:id="@id/equipmentTypeCode" android:value="@integer/cloakSlotCode" />

然后使用以下方法调出具有正确项类型的dialogfragment:

@Override
public void onClick(View v) {
    int code = Integer.parseInt((String) v.getTag(R.id.equipmentTypeCode));
    showSelectDialog(code);
}

所以我想我的问题是哪个onclick()方法更可取?起初我喜欢第二个,因为它让我觉得更聪明、更优雅,但后来我犹豫了。这有点混乱,太多的资源/类被捆绑在一起,在将来进行更改可能很困难(或者至少我这么认为?)。你认为这种方法可以接受吗?还是我想的太多了?很抱歉为一个简单的问题作了这么长的解释。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题