다른 Activity(액티비티), Fragment에 있는 View값 가져오기
다른 Activity(액티비티), Fragment에
있는 View값 가져오기
이번글에서는 다른 Activity, Fragment에 있는 View, Layout, widget등등의 정보를 가져오는 방법을 알아보겠습니다.
기본적으로 인텐트로 주고 받는 법은 다들 잘 아실겁니다.
인텐트로 액티비티를 넘겨줄때 putExtra, getExtras를 써서 데이터를 주고 받을 수 있습니다
그런데 인텐트 말고 다른 방법으로 받아야하는 경우가 생길 수 있습니다.
그 해결 방법으로 static이 있습니다.
하지만 static으로도 안되는 경우가 있습니다.
(그리고 static을 남발하면 좋을것이 하나 없습니다..)
시간남으시는 분들은 아래 링크를 읽어보시길
(요즘은 구조가 바뀌어서
좀 다를 수 있으나 기본개념은 비슷하니)
JVM+static을 알아보자
하여튼 본론으로 넘어와서
앱이 구동됨과 동시에
다른 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()만
쓰셔도 괜찮습니다.
사실 다른 방법으로도
많지만..
그래도 이 방법이
나름 깔끔합니다..
'안드로이드(android) > View' 카테고리의 다른 글
TextView 내부 크기 구하기 - Rect, getPaint() (1) | 2016.10.17 |
---|---|
View를 최상위로 올리기 - BringToFront (0) | 2016.10.15 |
TextView가 물흐르듯 움직인다? marquee를 써보자 (0) | 2016.06.14 |
[안드로이드]화면 해상도 구하기 및 View의 가로,세로 구하기 (2) | 2016.04.23 |
setVisibility를 사용해보자 (0) | 2016.04.21 |