我希望我的应用程序提供一个功能来添加一个按钮,如Avadhani Y在How to create Button Dynamically in android?
中所描述的那样我复制了这段代码,当我按下+ -symbol时按钮出现,但它不是永久性的。当我关闭应用程序并再次打开它时,按钮会消失。
对于一个最小的工作示例我
将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文件:
<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>
答案 0 :(得分:1)
问题是您无法在运行时保存到layout
文件等资源。因此,您的选项(AFAIK)将Button
的参数和属性保存到数据库或其他持久存储中,然后在每次启动时检查以重新创建Button
。我想,这会非常麻烦,如果不小心的话,非常容易出错。
另一种选择,如果可以制作有限数量的Button
,只需在xml中创建它们,然后使用visibility
属性从gone
/更改
visible
。
答案 1 :(得分:0)
Android是“无国籍” - 换句话说,除非您“保存”更改,否则它们将被丢弃。您需要做的是提供一种方法来保持您期望的任何更改,超出用户与您的应用的直接交互。此外,您应该假设任何更改可能会在之后立即丢弃 - 换句话说,不要“等待”保存更改。如果用户的电话响铃,您的应用可能会转到后台,并在调用onPause
或onStop
或onDestroy
之前被杀死。
查看为按钮的可见性保存“标记”SharedPreferences
,然后阅读onCreate
或onStart
或onResume
中的标记。你很可能会使用其中任何一种,但你会发现有时候一种或另一种效果最好(或者一种效果不好)。