【问题标题】:refresh activity with dynamic content使用动态内容刷新活动
【发布时间】:2012-08-16 15:24:44
【问题描述】:

我有一个包含一些动态内容的活动。

对于数组的每一项,都有不同的内容(文本视图的数量、复选框、..) 用户单击“保存”按钮,然后屏幕必须自行刷新以显示下一项的内容。

我想知道像这样重新加载我的活动是否是一个好习惯:

Intent refresh = new Intent(this, conflictActivity.class);
startActivity(refresh)
finish()

而不是删除我的布局中的所有视图等...

我认为重新加载它更容易。 还有其他方法吗?

编辑:添加代码。

public class ConflicFieldTest extends Activity {

private int nbField;
private int nbChecked;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.conflict);

    final Button saveButton = (Button) findViewById(R.id.save);

    final LinearLayout leftLayout = (LinearLayout) findViewById(R.id.leftLayout);
    final LinearLayout rightLayout = (LinearLayout) findViewById(R.id.rightLayout);

    final TextView fieldName = new TextView(this);
    final LinearLayout editLayoutRight = new LinearLayout(this);
    final LinearLayout editLayoutLeft = new LinearLayout(this);

    final LinearLayout fieldRight = new LinearLayout(this);
    final LinearLayout fieldLeft = new LinearLayout(this);


    final ArrayList<String> allIdInConflict = getAllIdInConflict();
    for (int i = 0; i < allIdInConflict.size(); i++) {

        new AccountSyncTask() {

            @Override
            public void onPostExecute(
                    final ArrayList<ArrayList<String>> result) {

                nbField = 0;
                nbChecked = 0;



                final Map<String, Object> fieldsInConflict = conflict
                        .conflictWithFields(memoAccountMap,
                                serverAccountMap, modifiedAccountMap);


                for (Iterator<Map.Entry<String, Object>> field = fieldsInConflict
                        .entrySet().iterator(); field.hasNext();) {
                    final Map.Entry<String, Object> entry = field.next();

                    fieldName.setText(entry.getKey() + " : ");

                    final EditText[] editTextArrayRight = new EditText[fieldsInConflict
                            .size()];
                    final EditText[] editTextArrayLeft = new EditText[fieldsInConflict
                            .size()];
                    final CheckBox[] checkboxRight = new CheckBox[fieldsInConflict
                            .size()];
                    final CheckBox[] checkboxLeft = new CheckBox[fieldsInConflict
                            .size()];

                    checkboxRight[nbField] = new CheckBox(
                            ConflicFieldTest.this);
                    checkboxLeft[nbField] = new CheckBox(
                            ConflicFieldTest.this);

                    editLayoutLeft.setGravity(Gravity.CENTER_HORIZONTAL);
                    editLayoutRight.setGravity(Gravity.CENTER_HORIZONTAL);
                    fieldRight.setGravity(Gravity.CENTER_HORIZONTAL);
                    fieldLeft.setGravity(Gravity.CENTER_HORIZONTAL);


                    editLayoutRight.setOrientation(LinearLayout.HORIZONTAL);
                    fieldRight.setOrientation(LinearLayout.VERTICAL);
                    fieldLeft.setOrientation(LinearLayout.VERTICAL);


                    rightLayout
                            .addView(
                                    editLayoutRight,
                                    new LinearLayout.LayoutParams(
                                            LinearLayout.LayoutParams.FILL_PARENT,
                                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    leftLayout
                            .addView(
                                    editLayoutLeft,
                                    new LinearLayout.LayoutParams(
                                            LinearLayout.LayoutParams.FILL_PARENT,
                                            LinearLayout.LayoutParams.WRAP_CONTENT));

                    editTextArrayRight[nbField] = new EditText(
                            ConflicFieldTest.this);

                    editTextArrayRight[nbField].setText((String) entry
                            .getValue());
                    editTextArrayRight[nbField].setTextColor(Color.BLACK);
                    editTextArrayRight[nbField].setFocusable(false);
                    editTextArrayRight[nbField].setClickable(false);
                    editTextArrayRight[nbField].setWidth(180);
                    editTextArrayRight[nbField].setPadding(0, 10, 0, 0);

                    editTextArrayLeft[nbField] = new EditText(
                            ConflicFieldTest.this);
                    editTextArrayLeft[nbField]
                            .setText((String) serverAccountMap.get(entry
                                    .getKey()));
                    editTextArrayLeft[nbField].setTextColor(Color.BLACK);
                    editTextArrayLeft[nbField].setFocusable(false);
                    editTextArrayLeft[nbField].setClickable(false);
                    editTextArrayLeft[nbField].setWidth(180);
                    editTextArrayLeft[nbField].setPadding(0, 10, 0, 0);

                    final int i1 = nbField;

                    checkboxLeft[i1]
                            .setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {



                                }
                            });

                    checkboxRight[i1]
                            .setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {

                                }
                            });



                    editLayoutLeft.addView(fieldName);

                    editLayoutRight
                            .addView(
                                    editTextArrayRight[nbField],
                                    new LinearLayout.LayoutParams(
                                            LinearLayout.LayoutParams.WRAP_CONTENT,
                                            LinearLayout.LayoutParams.WRAP_CONTENT));

                    editLayoutLeft
                            .addView(
                                    editTextArrayLeft[nbField],
                                    new LinearLayout.LayoutParams(
                                            LinearLayout.LayoutParams.WRAP_CONTENT,
                                            LinearLayout.LayoutParams.WRAP_CONTENT));

                    editLayoutRight.addView(checkboxRight[nbField]);
                    editLayoutLeft.addView(checkboxLeft[nbField]);

                    nbField++;

                }

                saveButton.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        //save data & update UI
            }
        }

        .execute(appState.getSessionName(), id, "getObjectOnServer");

    }
}

对不起,代码有点脏(我已经删除了一些部分),我正在重新编写它。

【问题讨论】:

  • 不要重新加载活动,而是使用标志在单独的函数中编写与文本视图和复选框有关的操作。然后在 save 按钮上单击更新标志并再次调用该函数。我认为这会成功......
  • 谢谢,还有一个问题:您有使用标志的代码/伪代码示例吗?我不熟悉这个
  • 你能把你的代码贴在你所做的事情上吗??
  • 我已经给出了答案。我不知道它是否会为您提供解决方案。但可能会给出一个想法......

标签: android dynamic android-activity refresh


【解决方案1】:
int flag = 0;
public void updateUI() {
  if(flag == 0) {
     //your normal codes...
  } else {
     //display view with user given data
  }
}

oncreate 中调用此函数。首先标志将设置为零。当您在 textview 中输入数据并勾选复选框时,使用一些值更新标志。然后在save Button 上单击再次调用此函数。现在标志已设置。所以它会显示更新后的 UI。

我想这会给你一个想法..

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 2018-09-24
    • 2013-01-12
    • 2013-02-25
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多