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

时间:2014-04-30 19:29:09

标签: java android eclipse

我正在使用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?

1 个答案:

答案 0 :(得分:0)

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

  1. 带按钮的主要活动
  2. “信息页面”
  3. 要做到这一点,我需要有关如何获得此信息的信息:

    1. 在SQLite数据库中。
    2. 在字符串数组中
    3. 就个人而言,我更喜欢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的第二项活动)

      你可以改变的一些事情:

      1. 避免将其称为MainActivity2,它名称
      2. 并不那么有用
      3. 您不需要真正保存Context,您可以使用MainActivity.this
      4. 尝试使你的addListenerOnButton更通用,例如将一个Button作为参数并设置监听器..不要从XML中读取它,每个按钮最终会有180个方法。