2016-09-22 98 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