android-通过单击不同页面上的按钮(多次)将textView对象附加到线性布局中

android-通过单击不同页面上的按钮(多次)将textView对象附加到线性布局中,android,android-layout,android-fragments,android-intent,android-activity,Android,Android Layout,Android Fragments,Android Intent,Android Activity,我有两项活动。活动1旨在接收用户输入(EditText),并且有一个按钮(如果单击)将转到活动2。在活动2中,有一个线性布局和一个按钮,可将您带回活动1。目前,我可以将一个textView(包含活动1中的用户输入)添加到活动2中的LinearLayout,但我想将几个textView对象添加到LinearLayout。当我尝试在第一次输入后的任何时间添加用户输入时,它只是替换保存第一次输入的用户输入信息的textView对象 来自活动1(附录练习): public class AddExerci

我有两项活动。活动1旨在接收用户输入(EditText),并且有一个按钮(如果单击)将转到活动2。在活动2中,有一个线性布局和一个按钮,可将您带回活动1。目前,我可以将一个textView(包含活动1中的用户输入)添加到活动2中的LinearLayout,但我想将几个textView对象添加到LinearLayout。当我尝试在第一次输入后的任何时间添加用户输入时,它只是替换保存第一次输入的用户输入信息的textView对象

来自活动1(附录练习):

public class AddExercise extends AppCompatActivity {

    private EditText name;
    private EditText weight;
    private EditText sets;
    private EditText reps;
    private String deets;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_exercise);
        Button button = (Button) findViewById(R.id.button5);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToAddWorkout();
            }
        });
    }

    private void goToAddWorkout() {
        Intent intent = new Intent(this, AddWorkout.class);
        name = (EditText) findViewById(R.id.name);
        weight = (EditText) findViewById(R.id.weight);
        sets = (EditText) findViewById(R.id.sets);
        reps = (EditText) findViewById(R.id.reps);
        deets = name.getText().toString() + "\n\t\tWeight: " + weight.getText().toString() + "\n\t\tSets: " + sets.getText().toString() + "\n\t\tReps: " + reps.getText().toString();
        intent.putExtra("details", deets);
        startActivity(intent);
    }
}
public class AddWorkout extends AppCompactActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_workout);
        LinearLayout vBox = (LinearLayout) findViewById(R.id.vBox);
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            TextView tv = new TextView(this);
            tv.setText(extras.getString("details").toString());
            vBox.addView(tv);
        }
        Button button = (Button) findViewById(R.id.button3);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToAddExercise();
            }
        });
    }
}
来自活动2(添加训练):

public class AddExercise extends AppCompatActivity {

    private EditText name;
    private EditText weight;
    private EditText sets;
    private EditText reps;
    private String deets;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_exercise);
        Button button = (Button) findViewById(R.id.button5);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToAddWorkout();
            }
        });
    }

    private void goToAddWorkout() {
        Intent intent = new Intent(this, AddWorkout.class);
        name = (EditText) findViewById(R.id.name);
        weight = (EditText) findViewById(R.id.weight);
        sets = (EditText) findViewById(R.id.sets);
        reps = (EditText) findViewById(R.id.reps);
        deets = name.getText().toString() + "\n\t\tWeight: " + weight.getText().toString() + "\n\t\tSets: " + sets.getText().toString() + "\n\t\tReps: " + reps.getText().toString();
        intent.putExtra("details", deets);
        startActivity(intent);
    }
}
public class AddWorkout extends AppCompactActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_workout);
        LinearLayout vBox = (LinearLayout) findViewById(R.id.vBox);
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            TextView tv = new TextView(this);
            tv.setText(extras.getString("details").toString());
            vBox.addView(tv);
        }
        Button button = (Button) findViewById(R.id.button3);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToAddExercise();
            }
        });
    }
}

你应该试试roshan说的那样-

((ArrayAdapter)listView.getAdapter()).insert(data_object, index);
((ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();
对索引使用共享首选项。。。每次你来到第二个活动时,增加索引。。。退出应用程序时,只需清除shared pref index变量。
此外,您还可以在每个列表视图项中添加文本视图

您应该尝试类似roshan所说的方法-

((ArrayAdapter)listView.getAdapter()).insert(data_object, index);
((ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();
对索引使用共享首选项。。。每次你来到第二个活动时,增加索引。。。退出应用程序时,只需清除shared pref index变量。
此外,您还可以在每个列表视图项中添加textview,这样您就可以在第二个活动中添加多个条目,每次在第一个活动中添加一个条目。我建议采用一种不同且更简单的方法

在第二个活动中,使用listview/recyclerview,而不是添加新的textview。这还有一个额外的优点,即一旦添加了足够的条目,滚动就不会成为问题


维护一个全局条目列表,您可以将条目添加到该列表中。并使用此列表填充listview。

因此,每次在第一个活动中添加一个条目时,您都希望能够在第二个活动中添加多个条目。我建议采用一种不同且更简单的方法

在第二个活动中,使用listview/recyclerview,而不是添加新的textview。这还有一个额外的优点,即一旦添加了足够的条目,滚动就不会成为问题


维护一个全局条目列表,您可以将条目添加到该列表中。并使用此列表填充listview。

每次可以将文本添加到列表时,您都可以尝试一个公共静态字符串列表,然后在第二个活动中根据列表计数创建文本视图。并添加到线性布局中。

每次将文本添加到列表中时,您都可以尝试一个公共静态字符串列表,然后在第二个活动中根据列表计数创建文本视图。并添加到线性布局中。

根据我的说法,可以有几种方法,选择一种适合您相关应用的方法

  • 具有单个活动并承载两个片段。因此,您可以使用单个活动在片段之间共享数据。(推荐的方式,我想碎片会让你的工作更轻松。)。此外,您还可以在“活动”中存储一个局部变量,以便每次启动应用程序时都可以根据需要重新启动它
  • 如果没有,您可以使用SharedReferences。对于每个按钮单击,向首选项添加一个字符串。再添加一次单击时,请使用类似(“|”和“| |”)的分隔符追加新数据。。因此,在活动1中写入首选项,在活动2中读取首选项并将其显示为动态创建线性布局的列表视图,并将其附加到根布局
  • 在活动1中声明静态ArrayList,并在活动2中访问它。(非常糟糕的方式)

  • 有几种方法可以做到这一点,根据我,选择一个适合你的相关应用

  • 具有单个活动并承载两个片段。因此,您可以使用单个活动在片段之间共享数据。(推荐的方式,我想碎片会让你的工作更轻松。)。此外,您还可以在“活动”中存储一个局部变量,以便每次启动应用程序时都可以根据需要重新启动它
  • 如果没有,您可以使用SharedReferences。对于每个按钮单击,向首选项添加一个字符串。再添加一次单击时,请使用类似(“|”和“| |”)的分隔符追加新数据。。因此,在活动1中写入首选项,在活动2中读取首选项并将其显示为动态创建线性布局的列表视图,并将其附加到根布局
  • 在活动1中声明静态ArrayList,并在活动2中访问它。(非常糟糕的方式)

  • 为什么要使用偏好?参考HashMap会使它更健壮吗?只是一个建议…为什么要使用偏好?参考HashMap会使它更健壮吗?只是一个建议..声明一个静态文件并通过另一个活动访问它不是正确的方法。有很多方法可以做到这一点。或者,您可以将该数据放入一个Intent,并将其发送到活动,然后在那里访问它。另外,稍后如果您希望在移动到活动2后终止活动1,这也不会有帮助!声明一个静态文件并用另一个活动访问它是不正确的。有很多方法可以做到这一点。或者,您可以将该数据放入一个Intent,并将其发送到活动,然后在那里访问它。另外,稍后如果您希望在移动到活动2后终止活动1,这也不会有帮助!