2

我正在用android开发一个游戏应用程序。在我的应用程序中,我将级别和添加级别作为列表视图。
现在我需要在达到关卡目标后锁定关卡。我不知道该怎么做。如何锁定listview安卓。通过使用以下内容,我正在填充列表并通过。

        mainListView = (ListView) findViewById(R.id.mainListView);
        // mainListView.setSelection(0);
        String[] levels = new String[] { "Level-1", "Level-2", "Level-3",
                "Level-4", "Level-5", "Level-6" };
        ArrayList<String> levelList = new ArrayList<String>();
        levelList.addAll(Arrays.asList(levels));

        listAdapter = new ArrayAdapter<String>(this, R.layout.simple, levelList);

        mainListView.setAdapter(listAdapter);
        getlevelFromDb();
        mainListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> myAdapter, View myView,
                    int myItemInt, long mylng) {
                String level = (String) (mainListView
                        .getItemAtPosition(myItemInt));
                Intent intent = new Intent(LevelsActivity.this,
                        QuestionActivity.class);
                intent.putExtra("level", level);
                startActivity(intent);

            }
        });
4

3 回答 3

2

在这种情况下,我基本上会有一个与级别数组平行的布尔数组(某种意义上,有很多方法可以完成这些类型的值)。要锁定它们不被操作,您可以在操作本身(onItemClick)中检查此布尔数组。这样,您只能在看到真值时采取行动,什么也不做,或者提出一个小观点,说他们还没有做到那么远,或者如果数组状态为假。

当他们通过关卡时,您可以简单地将一个真值应用到下一个关卡,列表视图中的项目的操作应该会自动拾取。

如果您想将尚未解锁的关卡变灰,那么您必须为 ListView 实现一个自定义 ArrayAdapter!!!

于 2012-06-18T13:00:33.060 回答
1

如果您想使用字符串作为您的关卡 ID,那么您将不得不在新关卡解锁时将字符串添加到您的数组中。

或者,您可以使用带有布尔标志“已解锁”的自定义级别类以及自定义 ListAdapter 以仅显示未锁定的级别。

于 2012-06-18T12:51:48.807 回答
0

Jarkko 有最好的解决方案,但如果你想保持简单,你需要将解锁的关卡存储在某个地方(共享首选项会起作用),然后在启动关卡活动之前,你需要检查关卡是否解锁。所以

if (isLevelUnlocked(level)){
    startActivity(intent);
}else{
    //Level is not unlocked yet, display a msg to the user.
}
于 2012-06-18T13:00:07.193 回答