创建一个类实例并使用局部变量命名它(android)

时间:2014-01-09 10:04:45

标签: java android class instance

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

This is what the application looks like

(*旁边信息*: 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);

但我不确定这是我在找什么。

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

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

2 个答案:

答案 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成员的值设置为由用户,以便稍后可以使用此名称引用此对象。 希望这会有所帮助。