안녕하세요 ^^ 제목처럼 공부하는 학생입니다.
Activity 하나의 화면을 구성하는것은 예제를 보면 쉽게 가능하지만
Activity간의 데이터를 전달하고 구현하는것은 아직 초보자인 저에게 어렵네요ㅠ
우선 구글링을 통해 데이터 전달하는것은 Context나 Intent를 통해 가능하다는것은 확인 했는데 둘이 차이가 있는건지..
아니면 단순 상하관계 속에 이용하는 내용인건지 구분이 잘 안가네요
둘의 차이가 있다면 그 부분에 대한 상세한 설명 부탁드립니다
그리고 Context를 이용해서 다음화면에 전달하는 소스는 구현을 했는데 이것을 다음 java단위로 짜른(?) 형태를
어떻게 구현해야 할지 모르겠네요.
음.. 드리고자 하는 말씀은 한 java 클래스 내에서 단계를 모두 구현할 수는 없으니까 클래스 구분을 하기위해 Intent나 Context를
통해 단계를 전달하려고 하는건데요
첫 화면에서 ID와 PW를 입력하면
-> 다음액티비티에서 처음 액티비티에서 입력한 ID와 PW가 전달되어 나옵니다.
소스 첨부해서 올리겠습니다. Context를 이렇게 사용해도 되는것인지... 그리고 Intent를 사용하려고 해보다가 주석처리 햇는데
좀더 효율적으로 사용할수 있는것인지 답변 부탁드리겠습니다 감사합니다 ^^
Member1Activity.java
-----------------------
package com.example.android0219;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class Member1Activity extends Activity {
Button mLoginButton;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) { //
super.onCreate(savedInstanceState);
setContentView(R.layout.member);
mLoginButton = (Button)findViewById(R.id.btnSignIn); // Login버튼을 눌러서 구현하기 위해 mLoginButoon변수를 만들어 해당하는 id값 넣어줌
mLoginButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
PersonInfo person = new PersonInfo();
Context TextContext = null;
// 안드로이드 128p "자바코드에서 문자열을 참조하려면 다음과 같은 방법을 사용하면 된다."라고 되어있어 사용
//System.out.println(person.getId());
EditText edit = (EditText)findViewById(R.id.userName);
String str = edit.getText().toString();
EditText edit1 = (EditText)findViewById(R.id.password);
String str1 = edit1.getText().toString();
/*TextView view = (TextView)findViewById(R.id.answer);
view.setText("Id : "+str+"\n"+"Password : "+str1);*/
Toast t = Toast.makeText(Member1Activity.this, "Id : "+str, Toast.LENGTH_SHORT);
t.show();
t = Toast.makeText(Member1Activity.this, "Password : "+str1, Toast.LENGTH_SHORT);
t.show();
TextContext = getApplicationContext();
//Intent intent = new Intent(Member1Activity.this,Member2Activity.class);
//startActivityForResult(intent,1);
CustomTextView cv = new CustomTextView(TextContext);
cv.setTextColor(Color.BLACK);
cv.setText("Id : "+str+"\n"+"Password : "+str1);
setContentView(cv);
}
});
}
}
빨강색 주황색 부분이 문제 되는 부분입니다 ㅠ
이걸 통해 Member2Activity.java에서 넘어가는 단계를 만들어 계속 구성해 보려고 하는건데요
Member2Activity.java
--------------------
/*package com.example.android0219;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class Member2Activity extends Activity {
Button mLoginButton;
protected void onCreate(Bundle savedInstanceState) { //
super.onCreate(savedInstanceState);
setContentView(R.layout.member1);
mLoginButton = (Button)findViewById(R.id.btnSignIn); // Login버튼을 눌러서 구현하기 위해 mLoginButoon변수를 만들어 해당하는 id값 넣어줌
mLoginButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//Context TextContext = null;
Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출
TextView view = (TextView)findViewById(R.id.userName);
TextView view1 = (TextView)findViewById(R.id.password);
CustomTextView cv = new CustomTextView(TextContext);
cv.setTextColor(Color.BLACK);
cv.setText("Id : "+str+"\n"+"Password : "+str1);
ImageView image =(ImageView).findViewById(R.drawable.desert);
setContentView(cv);
}
});
}
}*/
핵심은 Member1Activity에서 다 하지 않고 2에서 이루어지도록 하기위해서 구성하려고 했던겁니다.
제가 말씀드리고자 하는바가 이해 되면 좋겠는데 어떻게 더 표현을 해야할지 모르겠네요 ㅠ
답변 주신다면 정말 감사하겠습니다
무언가 열심히 하시는모습을 보니.. 참 기특하네요^^
한줄한줄에 대해서 답변을 드릴게요. 구체적으로는 아니지만 도움이 되실 수 있겠끔..
더 궁금하신점이 있으면 답글 주세요. 여유가 되면 도와드릴게요.
public class Member1Activity extends Activity {
Button mLoginButton;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) { //
super.onCreate(savedInstanceState);
setContentView(R.layout.member);
mLoginButton = (Button)findViewById(R.id.btnSignIn); // Login버튼을 눌러서 구현하기 위해 mLoginButoon변수를 만들어 해당하는 id값 넣어줌
-> 변수라고 표현하는건 옳지 않습니다. 이건 인스턴스라고 하시는게 맞아요. xml에서 정의한 뷰를 아이디값을 갖고 인스턴스를 만듭니다.
mLoginButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
PersonInfo person = new PersonInfo();
Context TextContext = null;
-> 자바의 모든 인스턴스는 첫글자를 소문자로 시작합니다. 카멜기법(낙타의등과 같다) 이라고해요.
// 안드로이드 128p "자바코드에서 문자열을 참조하려면 다음과 같은 방법을 사용하면 된다."라고 되어있어 사용
//System.out.println(person.getId());
EditText edit = (EditText)findViewById(R.id.userName);
String str = edit.getText().toString();
EditText edit1 = (EditText)findViewById(R.id.password);
String str1 = edit1.getText().toString();
/*TextView view = (TextView)findViewById(R.id.answer);
view.setText("Id : "+str+"\n"+"Password : "+str1);*/
Toast t = Toast.makeText(Member1Activity.this, "Id : "+str, Toast.LENGTH_SHORT);
t.show();
t = Toast.makeText(Member1Activity.this, "Password : "+str1, Toast.LENGTH_SHORT);
t.show();
TextContext = getApplicationContext();
//Intent intent = new Intent(Member1Activity.this,Member2Activity.class);
//startActivityForResult(intent,1);
-> 안드로이드에서 Intent라는건 액티비티간의 정보 전달을 위해 사용하는 매개체 역할을 하죠.
지금 작성하신 코드는 'Member2Activity를 실행시키고 Result값을 줄테니 받아라.' 라는 내용 인데요.
원하시는 방법은
Intent intent = new Intent(Member1Activity.this,Member2Activity.class);
intent.putExtra("ID", id);
intent.putExtra("PASSWORD", password);
startActivityForResult(intent,1);
이렇게 하시면 일단 맴버2 액티티에 원하는 내용을 담아서 넘기게 됩니다.
->>>>>>>>>> 시작
CustomTextView cv = new CustomTextView(TextContext);
cv.setTextColor(Color.BLACK);
cv.setText("Id : "+str+"\n"+"Password : "+str1);
setContentView(cv);
-<<<<<<<<< 끝, 해당 부분이 이해가 되질 않네요. 어떤의도로 만드신지 모르겠어요. 보통 setContentView의 호출은 초기 onCreate()시와 가로/세로 모드 변환시만 사용합니다.
CustomTextView를 사용하시고 싶으시면, xml에 정의하셔서 사용하시는 방법을 권해드립니다.
사용법은 R.layout.member에
<커스텀패키지주소.CustomTextView
android:id="@+id/customText"
android:....
android:....
/>
해당 커스텀 텍스트뷰는 텍스트 뷰를 상속받아 만드셨을테니 텍스트뷰에서 사용하시는 속성을 지정하셔서 쓰시면 됩니다.
이렇게 xml에 작성하시고, 가져오시는 방법 위에 작성하신 edit처럼 가져다 사용하시면 되시겠네요.
}
});
}
}
빨강색 주황색 부분이 문제 되는 부분입니다 ㅠ
이걸 통해 Member2Activity.java에서 넘어가는 단계를 만들어 계속 구성해 보려고 하는건데요
Member2Activity.java
--------------------
/*package com.example.android0219;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class Member2Activity extends Activity {
Button mLoginButton;
protected void onCreate(Bundle savedInstanceState) { //
super.onCreate(savedInstanceState);
setContentView(R.layout.member1);
mLoginButton = (Button)findViewById(R.id.btnSignIn); // Login버튼을 눌러서 구현하기 위해 mLoginButoon변수를 만들어 해당하는 id값 넣어줌
mLoginButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//Context TextContext = null;
Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출
-> 1에서 인텐트에 아이디랑 패스워드를 담아서 넘겼으니 여기서 받으면 되겠죠?
String id = intent.getStringExtra("ID");
String password = intent.getStringExtra("PASSWORD);
이 값들을 로그상으로 찍어보세요. 제대로 넘겨져왔는지요.
TextView view = (TextView)findViewById(R.id.userName);
TextView view1 = (TextView)findViewById(R.id.password);
CustomTextView cv = new CustomTextView(TextContext);
cv.setTextColor(Color.BLACK);
cv.setText("Id : "+str+"\n"+"Password : "+str1);
ImageView image =(ImageView).findViewById(R.drawable.desert);
setContentView(cv);
}
});
}
}*/