我已在Click事件上以编程方式创建了Android TextView
。
public class FireMissilesDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_addvehicles, null))
// Add action buttons
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Dialog dialogAddVehicles = (Dialog) dialog;
etVehicleModel = (EditText) dialogAddVehicles.findViewById(R.id.etModel);
String vehicleModel = etVehicleModel.getText().toString();
SharedPreferences.Editor editor = myVehicleData.edit();
editor.putString("VehicleModel", vehicleModel);
editor.commit();
vehicleModelReturned = myVehicleData.getString("VehicleModel", "");
TextView valueTV = new TextView(AddMyVehicle.this);
linearLayout.addView(valueTV);
valueTV.setText(vehicleModelReturned);
valueTV.setGravity(Gravity.CENTER_HORIZONTAL);
valueTV.setTextSize(TypedValue.COMPLEX_UNIT_SP,22);
valueTV.setTextColor(Color.parseColor("#333333"));
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
FireMissilesDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
}
上面的代码完美无缺,并创建了一个新的TextView
,但是当我关闭应用程序并重新运行它时,TextView
将无法显示。
是否有任何方法可用于保存TextView
,以便即使关闭应用程序,TextView
也会保留。
你可以在这里找到整个代码 - > http://pastebin.com/0MZRmNAA
答案 0 :(得分:3)
您可以在活动类上创建一个布尔变量,并在单击该按钮时将其设置为true。这意味着已经创建了textview。
您应该将代码创建为onResume
方法的textview,并检查布尔变量以查看是否需要重新创建textview。
您还可以保存信息,无论按钮是否已添加到状态,以便在重新创建活动时重新创建文本视图(例如,在方向更改后)。
如果您在应用程序被杀后不需要保留信息,那么所有这些都可以。如果需要,请使用共享首选项(请参阅其他答案)。
更新:
以下示例活动显示了代码需要执行的操作:
public class MainActivity extends Activity {
private boolean textViewAdded; // whether the textview has been added
private final String STATE_TEXTVIEWADDED = "STATE_TEXTVIEWADDED";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) // restore state
textViewAdded = savedInstanceState.getBoolean(STATE_TEXTVIEWADDED);
}
@Override
protected void onResume() {
if (textViewAdded) addTextView();
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean(STATE_TEXTVIEWADDED, textViewAdded); // save state
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void buttonClick(View view) { // method called when a button is clicked.
if (!textViewAdded) addTextView();
}
private void addTextView() {
LinearLayout main = (LinearLayout) findViewById(R.id.mainLayout);
TextView valueTV = new TextView(MainActivity.this);
valueTV.setText("Sample");
main.addView(valueTV);
textViewAdded = true;
}
}
答案 1 :(得分:3)
您可以使用SharedPreferences
。
最初,请执行以下操作:
SharedPreferences SP = getSharedPreferences("preferences name", MODE_PRIVATE);
Editor edit = SP.edit();
执行setText()
时,请拨打以下内容:
edit.putString("text", your_value);
edit.commit();
在您的活动加载之前,您可以致电检查您是否拥有以下"text"
:
SP.getString("text", "");
我建议您为SharedPreferences
操作创建单独的类。并且还会覆盖onResume()
和onPause()
。有关参考,请参阅this,该示例将SharedPreference
实现为单独的类。
更新:我认为在您的情况下,您总是创建一个新的SharedPreference
,而不是使用现有的,创建一个单独的类,我认为一切都会顺利。< / p>
答案 2 :(得分:0)
如果您只需要在应用程序的生命周期内保留文本视图,您可以根据标志编写用于在onResume()
方法中创建文本视图的代码,请参阅 Szymon <的答案/ strong>即可。
但是,如果您希望将其保持在应用程序的正常生命周期之外,即使您强行停止了应用程序,也可以编写textview
创建的详细信息(textview
及其参数)在您活动的onDestroy()
的文件中。稍后重新启动活动时,您可以检查此文件,并根据文件将textview重新创建到布局中。
希望这会有所帮助。
答案 3 :(得分:0)
try This
=====
LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
TextView valueTV = new TextView(this);
valueTV.setText(vehicleModelReturned);
valueTV.setGravity(Gravity.CENTER_HORIZONTAL);
valueTV.setTextSize(TypedValue.COMPLEX_UNIT_SP,22);
valueTV.setTextColor(Color.parseColor("#333"));
valueTV .setLayoutParams(lpView);
linLayout.addView(valueTV );
答案 4 :(得分:0)
我认为你需要持久存储。你可以用两种方式做到这一点:
在您的情况下,您需要使用Preferences
(您也可以使用数据库,但这在性能方面具有成本效益)。
点击此链接:http://developer.android.com/training/basics/data-storage/shared-preferences.html
清楚地解释了如何使用首选项来保存和检索数据。
有关教程,您可以访问:
How to use SharedPreferences in Android to store, fetch and edit values