2016-09-22 139 views
-1

單擊每個TextView後,它們應該導向另一個佈局文件,以幫助用戶瞭解人口販賣。在onCreate方法中,我將setOnClickListener設置爲我的文本視圖。雖然它膨脹是一個問題。這是否稱爲視圖膨脹?我已經看到有人推薦使用片段,使用setContentView(從我發現這不應該使用),並使用佈局inflater,同時傳遞我想要的佈局和null。然而,這不起作用。這個代碼應該怎麼看?使用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> 

的Java類:

@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,爲什麼我需要它,它來自哪裏?

你可能不需要它;它可以爲空。 ViewGroup將視圖擴大到視圖。就像ListView一樣,您可以將每行加載到列表中作爲「組」。


不管怎麼說,如果你要動態地顯示基於點擊什麼不同的佈局文件,是Fragment的是做到這一點的一種方式,因此是ViewStub的。

而你實際上並沒有在TextView上調用inflate,因爲它是一種靜態方法。

@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); 

     } 
    }); 

} 

設置一個上點擊收聽到文本視圖,然後在它上MainActivity.this設置的內容着眼於:最終的代碼看起來應該像它相當於一個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'將會停止可靠的工作。因此,回到以前的內容視圖是一個挑戰。如果您想這樣做,則建議交換碎片。 –

+0

我試圖按下後退按鈕時遇到了這個問題。明天我會用碎片來實現它。感謝您的建議,這是一次學習體驗。 – Davep