2016-09-22 3 views
-1

각 TextView를 클릭하면 사용자가 인신 매매에 대해 알 수 있도록 다른 레이아웃 파일로 연결되어야합니다. onCreate 메서드에서 setOnClickListener를 내 텍스트보기로 설정했습니다. 팽창시키는 것은 문제입니다. 이것이 뷰를 팽창시키는 것입니까? 나는 사람들이 setContentView를 사용하여이 조각을 사용하도록 권고 한 것을 보았다. (나는 이것을 사용해서는 안된다.) 그리고 원하는 레이아웃으로 전달하면서 레이아웃 인플레이터를 사용했다. 그러나 그것은 작동하지 않습니다. 이 코드는 어떻게 보이나요?TextView를 사용하여 펼치기 레이아웃

는 XML :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.piatt.worksafe.MainActivity"> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Work Safe!" 
    android:textSize="36sp" 
    android:layout_centerHorizontal="true" 
    android:paddingBottom="32dp" 
    android:id="@+id/title" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="What is Human Trafficing?" 
    android:layout_below="@+id/title" 
    android:layout_centerHorizontal="true" 
    android:textSize="24sp" 
    android:padding="16dp" 
    android:id="@+id/whatIsHumanTrafficing" 
    android:clickable="true" 
    /> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="How do I get safe labor?" 
    android:layout_below="@+id/whatIsHumanTrafficing" 
    android:layout_centerHorizontal="true" 
    android:textSize="24sp" 
    android:padding="16dp" 
    android:id="@+id/howDoIGetSafeLabor" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="How do I check that my job/job offer is legal?" 
    android:layout_below="@+id/howDoIGetSafeLabor" 
    android:layout_centerHorizontal="true" 
    android:textSize="24sp" 
    android:padding="16dp" 
    android:gravity="center" 
    android:id="@+id/checkLegality" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="How can I get help?" 
    android:layout_below="@+id/checkLegality" 
    android:layout_centerHorizontal="true" 
    android:textSize="24sp" 
    android:padding="16dp" 
    android:id="@+id/getHelp" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="About us" 
    android:layout_below="@+id/getHelp" 
    android:layout_centerHorizontal="true" 
    android:textSize="16sp" 
    android:layout_alignParentBottom="true" 
    android:gravity="bottom" 
    android:id="@+id/aboutUs" 
    /> 



</RelativeLayout> 

는 자바 클래스 : 제외

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView whatIsHumanTrafficing = (TextView) findViewById(R.id.whatIsHumanTrafficing); 
    whatIsHumanTrafficing.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 

      //What is this context, why do I need it and where does it come from? 
      //What is the ViewGroup, why do I need it and where does it come from? 
      view.inflate(Context context, R.layout.what_is_human_trafficing, ViewGroup root); 
     } 
    }); 

} 

답변

0

:이 상황은 무엇 View.inflate

에 대한 문서를 읽을 수 있습니다, 왜 할 그것을 필요로하고 그것은 어디서 왔는가?

무엇 : 당신은보기를 팽창 매개 변수로 필요 : 왜 YourActivity.this

을 (실제 클래스 이름으로 대체).

ViewGroup은 무엇이며 왜 필요합니까? 그리고 그 원인은 무엇입니까?

아마 필요하지 않습니다. 그것은 null 일 수 있습니다. 보기를 확대하는 것은 ViewGroup입니다. ListView와 마찬가지로 목록에있는 각 행을 "그룹"으로로드합니다. 당신이 원하는 경우


가 어쨌든, 동적 클릭 무엇인지에 따라 다른 레이아웃 파일을 보여주기 위해, 예 Fragment 's은 (는) 그렇게하는 한 가지 방법이다, 그래서 ViewStub 있습니다's이 (가).

정적 메서드이기 때문에 실제로 TextView에서 inflate을 호출하지 않습니다. 받는 내용보기 설정 MainActivity.this에 내 다음 텍스트보기에 클릭 리스너에

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final RelativeLayout rl = (RelativeLayout) findViewById(R.id.splashScreenId); 
    TextView whatIsHumanTrafficing = (TextView) findViewById(R.id.whatIsHumanTrafficing); 
    whatIsHumanTrafficing.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 


      MainActivity.this.setContentView(R.layout.what_is_human_trafficing); 

     } 
    }); 

} 

세트 : 마지막 코드는 같이해야 LayoutInflater

View v = LayoutInflater.from(YourActivity.this).inflate(R.layout.your_layout, null); 
// TODO: Do something with v 
+0

내가 팽창하면 (R.layout.your_layout) 다른 매개 변수가 필요합니다. @Nullable Viewgroup 루트를 알려줍니다. 도와 주셔서 감사합니다. – Davep

+0

이전과 같은 대답입니다. 그것은'null' 일 수 있습니다 ('@ Nullable' 인자로 볼 수 있습니다) –

+0

Null은 이제 문제가 아닙니다. 상대 레이아웃'rl'에 대한 참조를 얻었고'rl.addView (v);'보기를 추가했습니다. 앱을 실행하면 이전 레이아웃 위에 텍스트가 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까? – Davep

0

와 함께이 일을하는 것과 같습니다 원하는 레이아웃.

+0

나는 이것을 반대합니다. 'setContentView' (이름에서 알 수 있듯이)는 내용보기를 덮어 씁니다. 따라서 findViewById가 안정적으로 작동을 멈 춥니 다. 따라서 이전 콘텐츠보기로 돌아가는 것은 어려운 일입니다. 이런 식으로하고 싶다면 Fragments를 교환하는 것이 좋습니다. –

+0

뒤로 버튼을 눌러 보았을 때 나는 이것에 막 달렸습니다. 내일 조각으로 구현하겠습니다. 조언 주셔서 감사합니다, 이것은 학습 경험되었습니다. – Davep