2014-01-09 23 views
1

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

This is what the application looks like

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

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

这给我留下了几个问题,第一次:如何动态创建此类的实例并为变量表示赋予一个有意义的名称(在旅途中)。我正在考虑使用用户输入的字符串变量来命名点击器,但我不确定这是否允许。

ex。

// 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

是点击者活动吗? – Raghunandan

+0

clicker.java只包含一个类Clicker,它为每个单独的'clicker'保存统计信息。 ClickerActivity是一个常规活动,当任何一个答题器打开时它会被调用,并且它会显示统计信息和选项。 @Raghunandan – wenincode

回答

3

您正在努力解决无法以您想要的方式解决的问题。我知道你想达到这样的事:

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

这不能做。

但是,您可以不创建简单的Clicker对象,而是创建一个Pair<Clicker, String>,其中String字段将作为关键字使用。然后你可以创建一个ArrayList那些Pair s并通过查看它的关键字来搜索你需要的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对象。

+0

我明白你的意思是使用像Pair这样的Pair类来识别每个点击者。如果我这样做比每次创建一个答题器时都需要一个新的Pair实例,那么正确吗?我可以将Pair实例保存在我的ArrayList 中。但是我仍然需要给每个Pair实例一个唯一的名称,对吧?这是不是在命名实例的同一问题中让我着迷?或者有没有办法解决这个问题?让我知道,如果这个答复太混乱/混乱,我会尝试重写它。 – wenincode

+0

我知道你的意思。当你将它们存储在'ArrayList'中时,你不必唯一地命名这些'Pair'。我将编辑我的答案,向你展示我的意思。无论如何,我真的鼓励你尝试'HashMap'解决方案,因为它更快,可能会教你一些东西 - 我只是告诉你如何使用它,所以你可以看到它非常简单。 –

+0

啊是的!我刚刚发现了一些类似的东西,关于使用Hashmap,并会问你的想法。完美,谢谢。 – wenincode

1

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

相关问题