【问题标题】:Same Spinner in multiple activities and fragments. Which is the best way to implement it?多个活动和片段中的相同 Spinner。实施它的最佳方法是什么?
【发布时间】:2014-02-16 00:30:25
【问题描述】:

假设我有一个包含 10 个国家(字符串)的 Spinner 视图。 我想在多个活动、片段、警报对话框等中使用这个微调器。

我怎样才能有效地做到这一点并节省代码行?哪个是最好的方法?

我首先想到的是创建一个类来创建微调器并扩展微调器小部件类。然后创建对象等。但是,作为一个初学者,这对我来说看起来有点复杂,有没有更简单的方法?

编辑: 微调器仅动态创建。它默认有 10 个项目,但会根据数据库条目逐渐填充。

【问题讨论】:

  • 对不起,我错过了这个。微调器以编程方式添加一些标准值,然后根据数据库条目进行填充。
  • 尝试扩展它。它可以帮助您完成未来的项目。不要试图寻找解决方法。
  • 你也可以用xml添加标准值,看this question
  • @A.S 你认为这对我来说是最有效和正确的方法吗?

标签: java android


【解决方案1】:

在填充微调器的任何类(但可能是一个很容易找到的类)中创建一个公共静态方法。它可以将上下文、数据库等作为输入,也可以将 Spinner 本身作为输入。然后你可以从任何片段或活动中调用这个相同的方法,并且总是得到相同的东西。只需创建您的布局(例如使用setContentView),从布局中获取对微调器的引用,然后将其传递给您的填充器方法。

例子:

//in Activity
public void onCreate(Bundle bundle){
    super.onCreate(bundle);

    DatabaseHelper myDataBaseHelper = ...;//

    setContentView(R.layout.my_layout);
    Spinner spinner = (Spinner)findViewById(R.id.my_spinner);
    Util.populateStandardSpinner(myDataBaseHelper, spinner, 
        getApplicationContext());

    //...
}


//Another class
public class Util{
    public static void populateStandardSpinner(DatabaseHelper dbHelper, 
            Spinner spinner, Context context) {
        //Get cursor from dbHelper
        //Create adapter for cursor data and apply it to spinner
}

我想您也可以扩展 Spinner 类,但我的偏好是避免将数据直接编码到小部件中。这会破坏模型-视图-控制器设计模式。


*我有时只是创建一个名为 Util 的类,在其中放置像这样的方便的静态方法。或者,如果您有一个数据库助手类,那么这可能是一个直观的放置位置。

【讨论】:

  • 这似乎是我一直在寻找的答案。让我尝试一下,稍后再回来接受答案。感谢您的详细回复。对于这些情况,“Util”类似乎很方便。
  • 是的,当然。我认为,如果您发现自己复制和粘贴的代码行超过三行,那么您需要一种方法来保持代码的可维护性。通常,获取游标应该异步完成。您仍然可以使用此方法执行此操作。一种方法是使用匿名类在此方法中创建 AsyncTask 子类,并使用最终变量传递给它。
  • 这是正确的选择,它的作用就像一个魅力。比扩展微调器类更容易和方便。但是我仍然有一些问题,因为我想在用户单击警报对话框中的项目后显示微调器。但这是另一个问题。谢谢!
【解决方案2】:

您可以为此创建一个单独的布局文件,并且其中只有微调器。

无论您需要什么,您都可以将其包含在您的布局中,例如

<include layout="@layout/spinnerLayout" />

【讨论】:

    【解决方案3】:

    扩展 Spinner 类本身。

    您可以在构造函数中初始化适配器,使用AsyncTask 动态加载数据库条目,并使用onAttachedToWindowonDetachedFromWindow 管理资源使用情况。

    遇到类似问题我通常会这样做,方便,易于开发和使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-03
      • 2010-09-17
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2020-01-05
      • 2013-09-01
      相关资源
      最近更新 更多