我正在开发一个小型/基本的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);
但我不确定这是我在找什么。
其次如果您发现这不是一个好的设计选择(我不是指图形化),请发表您对如何改进的意见。我是新手,并感谢您的反馈。
最后,感谢您抽出宝贵时间阅读我的问题。如果有任何混淆请发表意见,我会尽力澄清。
答案 0 :(得分:3)
你正在努力解决一个无法以你想要的方式解决的问题。我知道你想要达到这样的目的:
用户为您提供“nameForMyVariable”String
,并且您想要创建一个具有该名称的变量:
Clicker nameForMyVariable;
这不可能。
但是,您可以创建Clicker
,而不是仅创建Pair<Clicker, String>
对象,其中String
字段将被您用作关键字。然后,您可以创建这些ArrayList
的{{1}},并通过查看其密钥来搜索您需要的Pair
。
请注意,您需要创建自己的Clicker
类,因为Java没有它。这不会很难。
上述方法还引出了另一种解决方案 - 使用Pair
,以便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"));
对象的名称。
答案 1 :(得分:1)
添加Piotr的答案。 使用字典或Pair的替代方法是添加String类型的成员,比如Clicker类中的name。然后使用Class.newInstance()创建一个新的Clicker实例,并将name成员的值设置为由用户,以便稍后可以使用此名称引用此对象。 希望这会有所帮助。