Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在eclipse中创建多个屏幕视图?_Java_Android_Eclipse - Fatal编程技术网

Java 如何在eclipse中创建多个屏幕视图?

Java 如何在eclipse中创建多个屏幕视图?,java,android,eclipse,Java,Android,Eclipse,我正在使用适用于windows 7的Eclipse,我正在制作一个信息丰富的应用程序,只包含文本和脱机内容。 在我的应用程序中,我有大约180个按钮。每个按钮都将指向另一个屏幕。我需要知道如何使每个按钮指向特定的屏幕? 还有,有没有一种方法可以复制代码,而不必花费数小时将代码复制粘贴180次? 检查以下前两个屏幕的“我的代码”: 这是针对MainActivity.java的: 公共无效addListenerOnButton{ final Context context = this;

我正在使用适用于windows 7的Eclipse,我正在制作一个信息丰富的应用程序,只包含文本和脱机内容。 在我的应用程序中,我有大约180个按钮。每个按钮都将指向另一个屏幕。我需要知道如何使每个按钮指向特定的屏幕? 还有,有没有一种方法可以复制代码,而不必花费数小时将代码复制粘贴180次? 检查以下前两个屏幕的“我的代码”:

这是针对MainActivity.java的:

公共无效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个片段_main.xml和180个活动_main.xml?

这是我的想法,因为您的应用程序只是一个信息型应用程序,您可以创建两个活动:

带按钮的主要活动 信息页 要做到这一点,我需要有关您如何获得这些信息的信息:

在SQLite数据库中。 在字符串数组中 就我个人而言,我更喜欢SQLite DB,它允许您在将来改进它而不会出现问题

关于信息活动:

示例:在布局中,您有一个文本视图,其中将添加此活动应传递的文本

为了使其在您的案例中具有动态性,我们使用传递字符串来显示,在onCreate中,我们添加了如下内容:

Intent intent = getIntents();
String stringToDisplay = null;

if (intent != null) 
{
   stringToDisplay = intent.getStringExtra (EXTRA_STRING_CONTENT);
}
getIntents将获取我们的主要活动创建并传递给它的Intent对象。getStringExtra是一个简单的方法,它对Android说:我想获取与键EXTRA_string_内容一起保存的字符串,它有点像地图

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

好的,我将重点关注这两条线

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\u STRING\u内容

使用当前代码,我们将始终向第二个活动发送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读取第二个活动中的行

一些你可以改变的事情:

避免称之为MainActivity2,它没有名字那么有用 您实际上不需要保存上下文,您可以使用MainActivity.this 尝试使addListenerOnButton更通用,例如,将一个按钮作为参数,并将侦听器设置为它。不要从XML中读取它,每个按钮将有180个方法。
我建议你重新考虑180项活动的设计???@Raghunandan你说的重新考虑180项活动是什么意思?所以我应该基本上改变我的所有应用程序!不,我不会!请解释更多@Raghunandan为什么你不从1开始,看看goesI认为@Raghunandan是如何要求你评估你是否真的需要180项活动的。你真的吗您是否拥有180个独特的布局,或者每个活动是否包含相同类型的内容?如果它们包含相同类型的内容,那么您真正需要的可能是可以更改显示内容的单个活动。
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