한 활동의 값을 이전 활동으로 전달하는 방법
한 화면에서 이전 화면으로 값을 어떻게 전달 받았습니까?
이 경우를 고려하십시오. 두 가지 활동이 있습니다. 첫 번째 화면에는 하나 TextView
와 단추가 있고 두 번째 활동에는 하나 EditText
와 단추가 있습니다.
첫 번째 버튼을 클릭하면 두 번째 활동으로 이동해야하며 여기에서 사용자는 텍스트 상자에 제안을 입력해야합니다. 두 번째 화면에서 버튼을 표시 텍스트 상자의 값이 첫 번째 활동으로 이동해야하며 첫 번째 활동에 표시되어야합니다 TextView
.
한 활동에서 수행 된 작업을 다른 활동에서 수행 단계 세가 필요합니다.
startActivityForResult
기본 활동에서 사용하여 보조 활동 ( '텍스트 편집'활동)을 하위 활동으로 시작하십시오.
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
사용자가 버튼을 클릭 할 때 액티비티를 닫는 것이 아니라 하위 액티비티 내에서 새 인 텐트를 만들고 입력 된 텍스트 값을 추가에 포함해야합니다. 보조 활동을 위해 호출 setResult
하기 전에 부모 호출로 다시 전달합니다 finish
.
Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
마지막 단계는 Activity : Override onActivityResult
를 호출 하여 텍스트 항목 Activity에서 수신을 수신하는 것입니다. 반환 된 의도에서 추가를 가져와 표시해야하는 텍스트 값을 가져옵니다.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (STATIC_INTEGER_VALUE) : {
if (resultCode == Activity.RESULT_OK) {
String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
// TODO Update your TextView.
}
break;
}
}
}
다른 클래스 또는 활동의 변수 또는 개체에 액세스 할 수있는 몇 가지 방법이 있습니다.
A. 데이터베이스
B. 공유 선호도.
C. 객체화.
D. 공통 데이터를 보유 할 수있는 클래스는 사용자에 따라 공통 유틸리티로 명명 될 수 있습니다.
E. 인 텐트 Parcelable 인터페이스를 매개 및 데이터 전달.
프로젝트 요구 사항에 따라 증가합니다.
A. 데이터베이스
SQLite는 Android에 내장 된 오픈 소스 데이터베이스입니다. SQLite는 SQL 구문, 트랜잭션 및 준비된 문과 같은 표준 관계형 데이터베이스 기능을 지원합니다.
안내 -http : //www.vogella.com/articles/AndroidSQLite/article.html
B. 공유 기본 설정
사용자 이름을 저장 가정합니다. 이제 키 user-이름, 값 값 이라는 두 가지가 있습니다 .
보관 방법
// Create object of SharedPreferences.
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
//now get Editor
SharedPreferences.Editor editor = sharedPref.edit();
//put your value
editor.putString("userName", "stackoverlow");
//commits your edits
editor.commit();
putString (), putBoolean (), putInt (), putFloat (), putLong ()을 사용하여 원하는 dtatype을 사용할 수 있습니다.
가져 오는 방법
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
http://developer.android.com/reference/android/content/SharedPreferences.html
C. 객체화
Object serlization은 객체 상태를 저장하여 네트워크를 통해 전송하거나 목적에 맞게 사용할 수있는 경우에 사용됩니다.
Java Bean을 사용하고 필드 중 하나로 저장하고 getter 및 setter를 사용하십시오.
JavaBeans는 속성이있는 Java 클래스입니다. 속성을 개인 인스턴스 변수로 생각하십시오. 비공개이기 때문에 클래스 외부에서 액세스 할 수있는 유일한 방법은 클래스의 메서드를 통해서입니다. 속성 값을 변경하는 메서드를 setter 메서드라고하고 속성 값을 검색하는 메서드를 getter 메서드라고합니다.
public class VariableStorage implements Serializable {
private String inString ;
public String getInString() {
return inString;
}
public void setInString(String inString) {
this.inString = inString;
}
}
사용하여 메일 방법에 변수를 설정하십시오.
VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
그런 다음 개체 Serialzation을 사용하여이 개체를 직렬화하고 다른 클래스에서이 개체를 역 직렬화합니다.
직렬화에서 객체는 객체의 데이터와 객체의 유형 및 객체에 저장된 데이터 유형에 대한 정보를 포함하는 바이트 시퀀스로 표현 될 수 있습니다.
직렬화 된 객체가 파일에 기록 된 후에는 파일에서 읽고 직렬화 해제 할 수 있습니다. 즉, 객체와 해당 데이터를 나타내는 유형 정보와 바이트를 사용하여 메모리에서 객체를 다시 만들 수 있습니다.
이 튜토리얼을 원한다면이 링크를 참조하십시오.
http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html
D. CommonUtilities
프로젝트에서 자주 필요한 공통 데이터를 담을 수있는 수업을 스스로 만들 수 있습니다.
견본
public class CommonUtilities {
public static String className = "CommonUtilities";
}
E. 인 텐트를 통한 데이터 전달
이 데이터 전달 옵션에 대해서는이 튜토리얼을 참조하십시오.
그럴 필요 없어 ...
두 번째 활동에서 newIntent ()를 호출하십시오.
Intent retData=new Intent();
다시 전달할 데이터 추가
putExtras (retData.putExtra("userName", getUsrName()));
setResult로 진행하십시오.
setResult(RESULT_OK, retData);
그리고 끝낼 수 있습니다
finish();
startActivityForResult ()
다음은 추가 정보가있는 SDK의 링크입니다.
http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen
"화면에서 결과 반환"이라는 제목의 부분까지 아래로 스크롤합니다.
나는 종종 정적 setter 메서드와 함께 호출 활동에서 정적 변수를 사용하여 설정합니다.
이런 식으로 다양한 활동 간의 정확한 제어 흐름에 관계없이 모든 활동의 값을 마음대로 변경할 수 있습니다.
이 트릭은 응용 프로그램에서 동일한 활동 (클래스)의 인스턴스화에 관심이없는 경우에만 사용할 수 있지만 구현하기 가장 쉬운 방법이며 가장 많이 사용합니다. .
여기서 가장 좋은 방법은 범위 외부에서 정의 된 공통 클래스에 변수를 넣는 것입니다.
public class Utils
{
public static String mPosition;
}
코드 내부 (예 : OnButtonClick 등)
Intent intent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);
코드 내부
@Override public void onActivityResult (int requestCode, int resultCode, Intent data) {if (requestCode == Keys.PICK_CONTACT) {if (resultCode == Activity.RESULT_OK) {Uri contactData = data.getData ();
//you may use the variable here after intent result
LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
'IT' 카테고리의 다른 글
node.js에서 어디에서 있습니까의 sha1 해시를 어떻게 얻을 수 있습니까? (0) | 2020.08.27 |
---|---|
전체 화면 Java의 JFrame (0) | 2020.08.27 |
다른 시간에 다른 변수로 목록을 정렬하는 방법 (0) | 2020.08.27 |
akka는 Erlang과 어떻게 비교 검증? (0) | 2020.08.27 |
PDB 중단 점을 Python 코드에 넣는 더 간단한 방법? (0) | 2020.08.27 |