我正在使用Eclipse for Windows 7,我正在制作一个信息丰富的应用程序(只是文本和离线内容)。 在我的应用程序中,我有大约180个按钮。每个按钮将指向另一个屏幕。我需要知道如何让每个按钮通向特定的屏幕? 还有,有没有办法喜欢复制代码,而不是花费数小时复制和粘贴代码180次? 检查下面的代码,看看前两个屏幕:
那是MainActivity.java:
public void addListenerOnButton(){
final Context context = this;
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(context, MainActivity2.class);
startActivity(intent);
}
});
}
我的意思是代码只适用于一个按钮。我应该为每一个按钮重复这个吗?
还有一个问题,我应该做多少课? 180个主要活动,180个fragment_main.xml和180个activity_main.xml?
答案 0 :(得分:0)
这是我的想法,因为您的应用程序只是一个“信息性应用程序”,您可以创建两个活动:
要做到这一点,我需要有关如何获得此信息的信息:
就个人而言,我更喜欢SQLite数据库,它可以让你在将来没有问题的情况下进行改进。
关于Information activity
:
示例:在您的布局中,您有一个TextView
,其中将添加此活动应传递的文本。
为了让它在您的情况下变得动态,我们将字符串传递给使用Intents
显示,在我们的onCreate
我们添加如下内容:
Intent intent = getIntents();
String stringToDisplay = null;
if (intent != null)
{
stringToDisplay = intent.getStringExtra (EXTRA_STRING_CONTENT);
}
getIntents
将获取由我们的主要活动创建并传递给它的Intent
对象。 getStringExtra
是一个简单的方法,对Android说:我想获取使用密钥EXTRA_STRING_CONTENT
保存的字符串(类似于Map
)
EXTRA_STRING_CONTENT
是一个字段,我们用它来确保在传递数据时不会出现任何错误,因为我们在传递它时(在MainActivity中)和读取它时需要使用相同的名称( InformationActivity)
public static final String EXTRA_STRING_CONTENT = "EXTRA_STRING_CONTENT";
好的,我们已经完成了。
我们现在只需要将字符串设置为TextView:
TextView infoTextView = (TextView) findViewById(R.id.infotextview);
infoTextView.setText (stringToDisplay);
停止它。
现在我们应该转到我们的MainActivity代码并修改我们的addListenerOnButton
final Context context = this;
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(context, MainActivity2.class);
startActivity(intent);
}
});
好吧,我将重点关注这两行
Intent intent = new Intent(context, MainActivity2.class);
startActivity(intent);
我们需要传递字符串才能显示在这里,怎么样?
在我们使用getStringExtra
之前它是相似的(注意:它是相同的Intent类)但是现在我们需要putExtra
方法,编译器会为我们选择正确的重载,所以我们只需要做
String stringToDisplay = "Hello world";
intent.putExtra(InformativeActivity.EXTRA_STRING_CONTENT, stringToDisplay);
(注意:InformativeActivity.EXTRA_STRING_CONTENT)
使用当前代码,我们将始终将Hello world
发送到第二个活动,但我们需要基于按钮的动态内容......现在这取决于您获取数据的方式。
如果是字符串数组,则可以将字符串数组保存在数组中,然后基于按钮(如果它是第一个发送的字符串索引0等)。
一个例子:
int buttonId = 1; // it will be a general variable, if it's button 1 it will be 0, if 2-1 etc.
String[] informations = getResources().getStringArray(R.array.infos); // in a real code you should move it outside the `onClick` code and put it in a static final field.
intent.putExtra(InformativeActivity.EXTRA_STRING_CONTENT, informations[buttonId]); // it's the same of above
如果您了解这个概念,您将知道如何根据您的需求调整代码。
在某些情况下,您需要更多信息或者您想要发送的内容更好,如果由第二个活动管理(例如:在sqlite数据库中,您只能发送行的ID和读取行基于此ID的第二项活动)
你可以改变的一些事情:
addListenerOnButton
更通用,例如将一个Button作为参数并设置监听器..不要从XML中读取它,每个按钮最终会有180个方法。