다른 Activity(액티비티), Fragment에 있는 View값 가져오기

Posted by ITPangPang
2016. 4. 28. 00:17 안드로이드(android)/View


다른 Activity(액티비티), Fragment에 

있는 View값 가져오기



이번글에서는 다른 Activity, Fragment에 있는 View, Layout, widget등등의 정보를 가져오는 방법을 알아보겠습니다.


기본적으로 인텐트로 주고 받는 법은 다들 잘 아실겁니다. 


인텐트로 액티비티를 넘겨줄때 putExtra, getExtras를 써서 데이터를 주고 받을 수 있습니다


그런데 인텐트 말고 다른 방법으로 받아야하는 경우가 생길 수 있습니다.



그 해결 방법으로 static이 있습니다.


하지만 static으로도 안되는 경우가 있습니다. 


(그리고 static을 남발하면 좋을것이 하나 없습니다..)


시간남으시는 분들은 아래 링크를 읽어보시길

(요즘은 구조가 바뀌어서

좀 다를 수 있으나 기본개념은 비슷하니)


JVM+static을 알아보자

 http://itpangpang.xyz/71

http://itpangpang.xyz/72




하여튼 본론으로 넘어와서

앱이 구동됨과 동시에

다른 Activity에 있는

View의 값을

가져오는 방법을

이번글에서 써보겠습니다


해결방법은 

LayoutInflater

사용입니다.


Activity <-> Activity

[activity_main]

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context="com.example.khs.myapplication.MainActivity">

<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:text="Hello World!" />
</LinearLayout>


[activity_sub]

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tv"
android:text="이것은 텍스트 뷰"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:text="이것은 버튼"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>


다음은 Java코드

[MainActivity.java]

public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView tv_text = (TextView)findViewById(R.id.tv_text);

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.activity_sub, null);

Button btn = (Button)view.findViewById(R.id.btn);
TextView tv = (TextView)view.findViewById(R.id.tv);

tv_text.setText("버튼에 써있는 글자는 ["+btn.getText().toString()+"]이고\n"+"텍스트뷰에 써있는 글자는 ["+tv.getText().toString()+"]이다");
}
}


다른 Activity는 생략하겠습니다.

사실 초기에 가져오는거라 

필요없어서..



별건 없습니다만

성공적으로 나왔습니다.





다음은 Fragment에서

사용하는 방법을 

알려드리겠습니다


이건 그냥 코드 2줄만

놓겠습니다

똑같아서...


LayoutInflater layoutInflater = (LayoutInflater)((MainActivity)getActivity()).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.activity_sub, null);


나머지는 다 똑같고

Activity에서와 다르게

getSystemService가

빨간줄이 뜨게 될것입니다.


그럼 앞에 

(사용하는액티비티)getActivity

를 붙이시면 됩니다.


뭐 액티비티 하나 쓰시면

간단하게


LayoutInflater layoutInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.activity_sub, null);


getActivity()만

쓰셔도 괜찮습니다.


사실 다른 방법으로도

많지만..

그래도 이 방법이

나름 깔끔합니다..