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



(*附带信息*:
MainActivity.java是上面显示的主要活动。 ClickerActivity.java是第二个活动,用于显示每个单击器的统计信息。 Clicker.java是一个类,其中包含每个单击器的名称/单击计数/统计信息。


我的方法是,当按下“新建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);


但是我不确定这是我想要的。

其次,如果您发现这不是一个很好的设计选择(我不是说图形),那么请就如何改进它发表您的意见。我对此并不陌生,感谢您的反馈。

最后,感谢您抽出宝贵时间阅读我的问题。如有任何混淆,请发声,我将尽力澄清。

最佳答案

您正在为无法解决的问题而苦苦挣扎。我了解您想实现以下目标:

用户给您“ nameForMyVariable” String,并且您想要创建一个具有该名称的变量:
Clicker nameForMyVariable;

无法做到这一点。

但是,您可以创建一个Clicker而不是简单地创建Pair<Clicker, String>对象,其中String字段将由您用作键。然后,您可以创建这些ArrayListPair,并通过查看其键来搜索所需的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<Pair<Clicker, String>> clickers

您可以像这样添加新的Pair

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


现在看到了吗?完全不使用Pair对象的名称。

10-06 13:38