0

更新しました

これは私のリストビューアプリです:

ここに画像の説明を入力してください

インテントを開始してメールアクティビティを読み込むメールオプションをクリックします。

ここに画像の説明を入力してください

ユーザーが「戻る」をクリックすると、リストビューは空白になります。

ここに画像の説明を入力してください

これは、リストビューを設定するための私の方法です。

    public class view extends ListActivity {

ImageButton searchButton;
EditText searchName;
ListView searchedListResults;
long idToPass;
String numReturned;
String email;
SimpleCursorAdapter cursorAdapter;
DBHandler getCons;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    searchedListResults = (ListView) findViewById(android.R.id.list);

    list();

    searchName = (EditText) findViewById(R.id.inputName);

    searchedListResults.setTextFilterEnabled(true);

    searchName.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

            cursorAdapter.getFilter().filter(s.toString());

            searchedListResults.refreshDrawableState();

        }

    });

    getCons = new DBHandler(this, null, null);

    cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
        public Cursor runQuery(CharSequence constraint) {

            getCons.open();
            return getCons.getChanges(constraint.toString());

        }

    });
    searchedListResults.setAdapter(cursorAdapter);
}

private void list() {
    DBHandler DBsearchRef = new DBHandler(this, null, null);

    DBHandler search = new DBHandler(this, null, null);

    search.open();
    Cursor cursor = search.getData();
    search.close();
    startManagingCursor(cursor);

    String[] from = new String[] { DBsearchRef.KEY_NAME,
            DBsearchRef.KEY_TEL, DBsearchRef.KEY_EMAIL,
            DBsearchRef.KEY_COMMENTS };
    int[] to = new int[] { R.id.txtNameSet, R.id.txtContactSet,
            R.id.txtEmailSet, R.id.txtCommentSet };

    cursorAdapter = new SimpleCursorAdapter(this, R.layout.searchagain,
            cursor, from, to);
    searchedListResults.setAdapter(cursorAdapter);

}

@Override
protected void onResume() {
    super.onResume();

    list();

    searchName = (EditText) findViewById(R.id.inputName);

    searchedListResults.setTextFilterEnabled(true);

    searchName.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

            cursorAdapter.getFilter().filter(s.toString());

            searchedListResults.refreshDrawableState();

        }

    });

    getCons = new DBHandler(this, null, null);

    cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
        public Cursor runQuery(CharSequence constraint) {

            getCons.open();
            return getCons.getChanges(constraint.toString());

        }

    });
    searchedListResults.setAdapter(cursorAdapter);
}

@Override
public void onListItemClick(ListView list, View v, int list_posistion,
        long item_id) {
    idToPass = item_id;

    idToPass = item_id;

    DBHandler num = new DBHandler(this, null, null);

    num.open();
    numReturned = num.getNum(idToPass);

    email = num.getEmail(idToPass);
    num.close();

    final CharSequence[] items = { "Call Contact", "Email Contact",
            "Edit Contact", "Add Appointment" };

    Builder alertDialogBuilder = new AlertDialog.Builder(view.this);

    alertDialogBuilder.setTitle("Contact Options:");

    alertDialogBuilder.setItems(items,
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int item) {

                    if (items[item].equals("Call Contact")) {

                        Intent makeCall = new Intent(Intent.ACTION_DIAL,
                                Uri.parse("tel:" + numReturned));
                        startActivity(makeCall);
                    }

                    else if (items[item].equals("Email Contact")) {

                        Intent emailIntent = new Intent(
                                "com.example.flybaseapp.ContactsEmail");
                        emailIntent.putExtra("passedEmailAdd", email);
                        startActivity(emailIntent);
                    } else if (items[item].equals("Edit Contact")) {

                        Intent Edit = new Intent(
                                "com.example.flybaseapp.viewEdit");
                        Edit.putExtra("passedID", idToPass);
                        startActivity(Edit);

                    }

                    else if (items[item].equals("Add Appointment")) {

                        Intent conAdd = new Intent(
                                "com.example.flybaseapp.AddAppointmentContact");
                        conAdd.putExtra("newpassedID", idToPass);
                        startActivity(conAdd);

                    }
                }

            });

    alertDialogBuilder.show();

}

オーバーライドされたonResumeメソッドでこれを設定する場合ですか?

4

3 に答える 3

0

Androidアクティビティライフサイクルはここにあります:

http://developer.android.com/reference/android/app/Activity.html

ここに画像の説明を入力してください

于 2013-03-25T20:07:13.453 に答える
0

アクティビティライフサイクルは、アクティビティのすべてのステージをすでに実装しています。自分で定義する必要があるonCreate()を除いて。

このライフサイクルの他の段階を呼び出すのは、それらの段階で特定のことを行う必要がある場合のみです。

例としてLoginActivityを取り上げましょう。


あなたはこのようなアクティビティを作成します(私は知っています...ここでは何も新しいことはありません):

public class LoginActivity extends Activity {

    public EditText usr;
    public EditText pass;
    final Context context = this;
    private TextView loginButton;
    private Boolean justCreated = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);

        initLoginButton();

        initEditTexts();

        addSwipeGesture();

        justCreated = true;
    }

ここで、ログインが正常に検証され、アクティビティが短いが激しいライフサイクルの次のステップに進むと仮定しましょう。これがonPause()ステージになります。これは、アクティビティが「バックグラウンド」にあることを意味します。

ユーザーがユーザー名とパスワードとして設定した文字列はどうなりますか?..まあ、どこかに保存しないと、ユーザーがログイン画面に戻ると失われます(これはアクティビティが再作成されることを意味します)。

この場合、onPause()メソッドを@Overrideして、それらの文字列に対して何かを行う必要があります。簡単にするために、これらの文字列を保存するSavedValuesという名前の作成されたパブリッククラスを使用します。


SavedValuesクラス:

public class SavedValues {

    private static String loginUser = "";
    private static String loginPassword = "";


    public static String getLoginUser() {
        return loginUser;
    }

    public static void setLoginUser(String loginUser) {
        SavedValues.loginUser = loginUser;
    }

    public static String getLoginPassword() {
        return loginPassword;
    }

    public static void setLoginPassword(String loginPassword) {
        SavedValues.loginPassword = loginPassword;
    }
}


今...アクティビティに含まれているonPause()メソッド:

public class LoginActivity extends Activity {

    public EditText usr;
    public EditText pass;
    final Context context = this;
    private TextView loginButton;
    private Boolean justCreated = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);

        initLoginButton();

        initEditTexts();

        addSwipeGesture();

        justCreated = true;
    }

@Override
public void onPause() {
    super.onPause();

    SavedValues.setLoginUser(usr.getText().toString());
    SavedValues.setLoginPassword(pass.getText().toString());

    justCreated = false;
}   

この時点まではすべてうまくてダンディです。これで、ユーザーがLoginActivityに戻ると、ライフサイクルのonResume()ステージに入ります。それについて何もしなければ、保存された値は設定されません。

したがって、LoginActivityが眠りから覚めたときにこれらの値を取得するために、onResume()メソッドをオーバーライドします。

public class LoginActivity extends Activity {

    public EditText usr;
    public EditText pass;
    final Context context = this;
    private TextView loginButton;
    private Boolean justCreated = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);

        initLoginButton();

        initEditTexts();

        addSwipeGesture();

        justCreated = true;
    }

@Override
public void onPause() {
    super.onPause();

    SavedValues.setLoginUser(usr.getText().toString());
    SavedValues.setLoginPassword(pass.getText().toString());

    justCreated = false;
}

@Override
public void onResume() {
    super.onResume();

    if (justCreated == true) //if the user recreated the activity, restore the login values from the previous instance
    {
        usr.setText(SavedValues.getLoginUser(), TextView.BufferType.EDITABLE);
        pass.setText(SavedValues.getLoginPassword(), TextView.BufferType.EDITABLE);

        usr.setSelection(usr.getText().length());
    }
    else //if the user only left the activity clear the login values
    {
        usr.setText("", TextView.BufferType.EDITABLE);
        pass.setText("", TextView.BufferType.EDITABLE);
    }
}



したがって、これは、アクティビティのライフサイクルのいくつかの段階を有利に使用する方法です。もちろん、これにはまだまだありますが、これで始められると思います。AndroidDevで詳細をお読みください。サイト。紛らわしい方法で非線形ではありますが、それらにはまともなドキュメントがあります。


アップデート

更新された質問に答えるには:

私のSavedValuesの例を使用して、次のようなものを入れることができます。

private static ArrayList<Custom> yourList;

public static ArrayList<Custom> getyourList() {
        return yourList;
}

public static void setyourList(ArrayList<Custom> yourList) {
        SavedValues.yourList = yourList;
}

次に、onPause()メソッドで次のように記述します。

@Override
public void onPause() {

    SavedValues.setyourList(getyourList()); // save the selected item list
    super.onPause();
    }

ここで、戻るボタンを押してアクティビティに戻ると、データがそこにあるはずです。

Oracle DBから移入されたアレイアダプタを使用して、ほぼ同じアプローチを使用しました。チャームのように機能します。



乾杯と幸運を!

于 2013-03-25T20:23:43.897 に答える
0

Androidライフサイクルは、コードに記述されていなくても、必要なメソッドを実行します。onCreate()あなたがするために必要な唯一のものですoverridestate他のすべては、あなたが何をしているかに従って実行されますActivity。ただし、override必要に応じて、これらのメソッドのいずれかまたはすべてを実行できます。

たとえば、onResume()は表示されるたびに実行されますActivityが、が最初に作成されonCreate()たときにのみ実行されるため、コードを挿入して、が表示されるたびに実行されるようにすることができます。または、が破棄されているときに変数を保存したい場合もありますActviityonResume()ActivityActivity

@Override
public void finish()
{
    super.finish();
    // save variable to sharedprefs or wherever here
}
于 2013-03-25T20:25:09.120 に答える