从应用内永久添加按钮

时间:2015-02-12 21:27:19

标签: java android xml eclipse button

我希望我的应用程序提供一个功能来添加一个按钮,如Avadhani Y在How to create Button Dynamically in android?

中所描述的那样

我复制了这段代码,当我按下+ -symbol时按钮出现,但它不是永久性的。当我关闭应用程序并再次打开它时,按钮会消失。

对于一个最小的工作示例我

  • 创建了Eclipse设置的空白Android应用程序项目
  • How to create Button Dynamically in android?中描述的方法的一部分添加到MainActivity.java(第二个带减号的情况会生成几条错误消息,所以我把它留了出来。):

    public void onClick(View v){
    
         switch(v.getId()){
         case (R.id.plusbutton):
                     Button myButton = new Button(this);
                     myButton.setText("Add Me");
    
                     LinearLayout ll = (LinearLayout)findViewById(R.id.buttonlayout);
                     LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                     ll.addView(myButton, lp);
                     break;
        }
    }
    
  • 导入了必要的包。实际上我不确定我是否为LayoutParams - eclipse选择了正确的一行列出了几个包 - 我选择了android.view.ViewGroup.LayoutParams

  • 将activity_main.xml文件更改为以下文件。
  • 在strings.xml文件中添加了一些字符串

我的activity_main.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/buttonlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.button_test.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button 
         android:id="@+id/plusbutton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="onClick"
         android:text="@string/plus"  />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

问题是您无法在运行时保存到layout文件等资源。因此,您的选项(AFAIK)将Button的参数和属性保存到数据库或其他持久存储中,然后在每次启动时检查以重新创建Button。我想,这会非常麻烦,如果不小心的话,非常容易出错。

另一种选择,如果可以制作有限数量的Button,只需在xml中创建它们,然后使用visibility属性从gone /更改invisible到visible

答案 1 :(得分:0)

Android是“无国籍” - 换句话说,除非您“保存”更改,否则它们将被丢弃。您需要做的是提供一种方法来保持您期望的任何更改,超出用户与您的应用的直接交互。此外,您应该假设任何更改可能会在之后立即丢弃 - 换句话说,不要“等待”保存更改。如果用户的电话响铃,您的应用可能会转到后台,并在调用onPauseonStoponDestroy之前被杀死。

查看为按钮的可见性保存“标记”SharedPreferences,然后阅读onCreateonStartonResume中的标记。你很可能会使用其中任何一种,但你会发现有时候一种或另一种效果最好(或者一种效果不好)。