同一个Spinner有多个活动和片段。实施它的最佳方法是哪种?

时间:2014-02-15 15:49:42

标签: java android

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

如何有效地执行此操作并保存代码行?哪种方式最好?

我首先想到的是创建一个创建微调器并扩展微调器窗口小部件类的类。然后创建对象等。然而,作为一个开始,它看起来有点复杂,有更简单的方法吗?

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

3 个答案:

答案 0 :(得分:1)

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

无论您何时需要,都可以在

等布局中加入
<include layout="@layout/spinnerLayout" />

答案 1 :(得分:1)

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

示例:

//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类,但我的首选是避免将数据直接编码到widget中。这将打破模型 - 视图 - 控制器设计模式。


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

答案 2 :(得分:0)

扩展Spinner类本身。

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

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

相关问题