문제

한 화면에서 이전 화면으로 값을 전달하려면 어떻게합니까?

이 사례를 고려하십시오. 두 가지 활동이 있습니다. 첫 번째 화면에는 하나가 있습니다 TextView 그리고 버튼과 두 번째 활동에는 하나가 있습니다 EditText 그리고 버튼.

첫 번째 버튼을 클릭하면 두 번째 활동으로 이동해야하며 여기에서 사용자는 텍스트 상자에 무언가를 입력해야합니다. 두 번째 화면에서 버튼을 누르면 텍스트 상자의 값이 첫 번째 활동으로 이동해야하며 첫 번째 활동에 표시되어야합니다. TextView.

도움이 되었습니까?

해결책

한 활동에서 수행 된 동작을 다른 활동 내에서 캡처하려면 세 단계가 필요합니다.

2 차 활동 ( '텍스트 편집'활동)을 사용하여 하위 활동으로 시작하십시오. startActivityForResult 주요 활동에서.

Intent i = new Intent(this,TextEntryActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

사용자가 버튼을 클릭 할 때 활동을 닫지 않고 복종 성 내에서 새로운 의도를 만들고 Extras 번들에 입력 된 텍스트 값을 포함시켜야합니다. 부모 전화로 다시 전달합니다 setResult 전화하기 전에 finish 2 차 활동을 닫습니다.

Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

마지막 단계는 호출 활동에 있습니다. onActivityResult 텍스트 입력 활동에서 콜백을 듣습니다. 표시해야 할 텍스트 값을 얻으려면 반환 된 의도에서 추가 정보를 얻으십시오.

@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. 의도 및 비평 가능한 인터페이스를 통해 데이터 전달.

프로젝트 요구에 따라 다릅니다.

ㅏ. 데이터 베이스

SQLITE는 Android에 포함 된 오픈 소스 데이터베이스입니다. SQLITE는 SQL 구문, 트랜잭션 및 준비된 문과 같은 표준 관계형 데이터베이스 기능을 지원합니다.

튜토리얼 - http://www.vogella.com/articles/androidsqlite/article.html

비. 공유 선호도

사용자 이름을 저장하고 싶다고 가정 해 봅시다. 이제 두 가지가있을 것입니다 열쇠 사용자 이름, 값.

저장 방법

 // 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

씨. 객체 직렬화

객체 붕괴가 네트워크로 보내도록 객체 상태를 저장하거나 목적을 위해 사용할 수있는 경우 사용됩니다.

Java Beans를 사용하여 그의 들판 중 하나로 보관하고 그에게서 그 자리를 사용하고 세터를 사용하십시오.

Javabeans는 속성이있는 Java 클래스입니다. 속성을 개인 인스턴스 변수로 생각하십시오. 그것들은 사적이기 때문에 수업 밖에서 액세스 할 수있는 유일한 방법은 수업의 방법을 통한 것입니다. 속성 값을 변경하는 방법을 세터 메소드라고하며 속성 값을 검색하는 방법을 getter 메소드라고합니다.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

사용하여 Mail Method에서 변수를 설정하십시오

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

그런 다음 객체 시리얼을 사용 하여이 객체를 직렬화하고 다른 클래스 에서이 객체를 제외하십시오.

직렬화에서 객체는 오브젝트의 데이터와 객체의 유형에 대한 정보와 객체에 저장된 데이터 유형을 포함하는 일련의 바이트로 표시 될 수 있습니다.

직렬화 된 객체가 파일에 기록 된 후 파일에서 읽고, 즉 객체를 나타내는 유형 정보 및 바이트와 해당 데이터를 사용하여 메모리의 개체를 재현 할 수 있습니다.

이 튜토리얼을 원한다면이 링크를 참조하십시오

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

다른 클래스에서 변수를 얻습니다

디. 공통성

프로젝트에서 자주 필요한 공통 데이터를 포함 할 수있는 자아로 수업을 만들 수 있습니다.

견본

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

이자형. 의도를 통해 데이터를 전달합니다

이 데이터를 전달하는이 옵션은이 자습서를 참조하십시오.

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelableclasses/

당신은 그럴 필요가 없습니다 ..

두 번째 활동에서 NewIntenet ()에게 전화하십시오

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

"화면에서 결과 반환"이라는 제목의 부품으로 스크롤하십시오.

나는 종종 통화 활동에서 정적 세터 방법을 사용하여 정적 변수를 사용하여 설정합니다.

이런 식으로 나는 다양한 활동 사이의 정확한 제어 흐름에 관계없이 모든 활동의 값을 마음대로 변경할 수 있습니다.

이 트릭은 응용 프로그램에서 동일한 활동 (클래스) 이상의 사본을 인스턴스화하지 않는 경우에만 사용할 수 있지만,이를 가장 쉽게 구현하기가 가장 쉽다는 것을 알았으며 가장 많이 사용합니다. .

여기서하는 가장 좋은 방법은 변수를 범위 밖에서 정의되는 공통 클래스에 넣는 것입니다.

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, 의도 데이터) {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);
....
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top