如何在Android中以编程方式保存TextView

时间:2013-12-30 05:54:39

标签: android android-layout android-intent android-view

我已在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

5 个答案:

答案 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)

我认为你需要持久存储。你可以用两种方式做到这一点:

  1. 选择
  2. 数据库
  3. 在您的情况下,您需要使用Preferences(您也可以使用数据库,但这在性能方面具有成本效益)。

    点击此链接:http://developer.android.com/training/basics/data-storage/shared-preferences.html

    清楚地解释了如何使用首选项来保存和检索数据。

    有关教程,您可以访问:

    How to use SharedPreferences in Android to store, fetch and edit values