1

いくつかの動的コンテンツを含むアクティビティがあります。

配列の各アイテムには、異なるコンテンツ (textViews、チェックボックスなどの数) があります。ユーザーが「保存」ボタンをクリックすると、次のアイテムのコンテンツを表示するために画面を更新する必要があります。

次のようにアクティビティをリロードするのが良い方法かどうか疑問に思っていました:

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");

    }
}

コードで申し訳ありませんが、少し汚れています (いくつかの部分を削除しました)。

4

1 に答える 1

1
int flag = 0;
public void updateUI() {
  if(flag == 0) {
     //your normal codes...
  } else {
     //display view with user given data
  }
}

でこの関数を呼び出しますoncreate。最初に、フラグはゼロに設定されます。テキストビューにデータを入力してチェックボックスをオンにすると、フラグが値で更新されます。次に、save Buttonクリック時にこの関数を再度呼び出します。これでフラグが設定されました。そのため、更新された UI が表示されます。

これはあなたにアイデアを与えると思います..

于 2012-08-21T10:46:35.833 に答える