【问题标题】:Creating a class instance and naming it using a local variable (android)创建一个类实例并使用局部变量命名它(android)
【发布时间】:2014-01-09 10:04:44
【问题描述】:

我正在开发一个小型/基本的 android 应用程序,它允许用户在 ListView 中创建项目并保留这些项目的一些统计信息(例如点击频率等)。现在我有了它,所以用户可以输入他们的新项目的名称,一旦他们点击创建按钮,它就会将该元素添加到 ListView。如果用户选择列表中的一项,则会打开第二个活动,他们将能够在其中分析统计信息、重置点击计数器等。

(* 侧面信息 *: MainActivity.java 是如上所示的主要活动。 ClickerActivity.java 是用于显示每个点击器的统计信息的第二个活动。 Clicker.java 是一个包含每个点击器的名称/点击计数/统计信息的类。 )

我的方法是,当按下“New Clicker”按钮时,我应该使用他们提供的名称并将其添加到 ListView 并创建一个 Clicker 类对象(用于跟踪统计信息)。这些 Clicker 对象将本地存储在 ArrayList 中,以便我可以轻松地扩大和缩小列表。然后启动 clickerActivity - 将 Clicker 类对象作为参数传递。

这给我留下了几个问题,首先:我怎样才能动态地创建这个类的一个实例并给变量表示一个有意义的名称(在旅途中)。我正在考虑使用用户输入的字符串变量来命名答题器,但我不确定这是否允许。

例如。

// This is the string name the user chooses for the new clicker
String newClickerName = clickerName.getText().toString();
Clicker newClickerName = new Clicker();
// Start the activity and pass the clicker object.

我意识到上面的代码不起作用,但这是我展示我正在尝试做的事情的最佳方式。我看过一些帖子,人们建议使用

Class var = Class.forName(classname);

但我不确定这就是我要找的。

其次如果您发现这不是一个好的设计选择(我不是指图形),请就如何改进提出您的意见。我是新手,感谢您的反馈。

最后,感谢您花时间阅读我的问题。如果有任何困惑,请提出来,我会尽力澄清。

【问题讨论】:

  • 点击者是一项活动吗?
  • clicker.java 只包含一个 Clicker 类,它包含每个单独的“点击器”的统计信息。 ClickerActivity 是一个通用活动,当任何点击器打开时都会调用它,它将显示统计信息和选项。 @Raghunandan

标签: java android class instance


【解决方案1】:

您正在努力解决无法以您希望的方式解决的问题。我了解您想要实现这样的目标:

用户给你“nameForMyVariable”String,你想用这个名字创建一个变量: Clicker nameForMyVariable;

这是做不到的。

但是,您可以创建一个Pair<Clicker, String>,而不是简单地创建Clicker 对象,其中String 字段将被您用作键。然后,您可以创建一个 ArrayListPairs 并通过查看其键来搜索您需要的 Clicker

请注意,您需要创建自己的 Pair 类,因为 Java 没有它。不过这并不难。

上述方法还导致了另一种解决方案 - 使用HashMap<String, Clicker>,因此String 是一个键。你可以这样使用它:

HashMap<String, Clicker> clickers = new HashMap<String, Clicker>();

// put some content to the map
clickers.put("nameForMyVariable1", new Clicker());
clickers.put("nameForMyVariable2", new Clicker());

// now you can find appropriate Clicker simply by specifying its key
clickers.get("nameForMyVariable1"); // returns Clicker with nameForMyVariable1 name

如果有什么不明白的地方告诉我。

编辑:

根据您在评论中提出的问题。假设您在某处创建了 ArrayList&lt;Pair&lt;Clicker, String&gt;&gt; clickers

您可以像这样添加新的Pair

clickers.add(new Pair<Clicker, String>(new Clicker(), "myVariableName1"));

你现在看到了吗?根本不使用 Pair 对象的名称。

【讨论】:

  • 我理解您的意思,即使用像字典这样的 Pair 类来识别每个答题器。如果我这样做,那么每次创建答题器时我都需要一个新的 Pair 实例,对吗?我可以将 Pair 实例保存在我的 ArrayList 中。但是我仍然需要给每个 Pair 实例一个唯一的名称,对吗?这不会让我陷入命名实例的同一问题吗?或者有没有办法解决这个问题?如果这个回复太混乱/混乱,请告诉我,我会尝试重新措辞。
  • 我知道你的意思。当您将它们存储在 ArrayList 中时,您不必唯一地命名这些 Pairs。我将编辑我的答案以向您展示我的意思。无论如何,我真的鼓励您尝试HashMap 解决方案,因为它更快,并且可以教您一些东西 - 我只是向您展示了如何使用它,所以您可以看到它非常简单。
  • 啊,是的!我自己也发现了类似的东西,关于使用 Hashmap,并想问你的想法。完美,谢谢。
  • 没问题,很高兴您发现我的回答很有用。 :-) 祝你好运!
【解决方案2】:

添加 Piotr 的答案。 使用字典或 Pair 的另一种方法是在 Clicker 类中添加一个 String 类型的成员,例如 name。然后使用 Class.newInstance() 创建 Clicker 的新实例,并将 name 成员的值设置为由用户,以便您以后可以使用此名称引用此对象。 希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多