2012-07-01 53 views
3

我有这种布局,包含单个TextView,但我希望能够使用java代码以动态方式更改其内容(要进行可视化的文本) 。动态设置布局中的TextView中的文本 - Android

<LinearLayout 

    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <TextView 

     android:id="@+id/list_header" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:textStyle="bold" 
     android:textSize="22dp" 
     android:textColor="#FFFFFF" 
     android:padding="10dp" 
     android:background="#336699" 

    /> 

</LinearLayout> 

正如你可以看到我已经没有定义android:text="blablabla"因为它不是固定在我使用它的代码点。

我想一些方法,如:与我需要以下

TextView headerValue = (TextView) findViewById(R.id.list_header); 
headerValue.setText("blablabla"); 

但是这不会工作,因为我用这个布局定义列表的标题的风格,而这些线路冲突使用:

View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null); 
listView.addHeaderView(header); 

你能帮我解决这个问题吗?


logcat的:

E/AndroidRuntime(1468): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
E/AndroidRuntime(1468): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
E/AndroidRuntime(1468): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
E/AndroidRuntime(1468): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
E/AndroidRuntime(1468): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(1468): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(1468): at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime(1468): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1468): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(1468): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(1468): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(1468): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(1468): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.DVA_HLUI/com.DVA_HLUI.DVA_HLUISuperviseActivity}: java.lang.NullPointerException 
E/AndroidRuntime(1468): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
E/AndroidRuntime(1468): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797) 
E/AndroidRuntime(1468): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135) 
E/AndroidRuntime(1468): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347) 
E/AndroidRuntime(1468): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682) 
E/AndroidRuntime(1468): at android.widget.TabHost.setCurrentTab(TabHost.java:346) 
E/AndroidRuntime(1468): at android.widget.TabHost.addTab(TabHost.java:236) 
E/AndroidRuntime(1468): at com.DVA_HLUI.DVA_HLUIActivity.onCreate(DVA_HLUIActivity.java:41) 
E/AndroidRuntime(1468): at android.app.Activity.performCreate(Activity.java:4465) 
E/AndroidRuntime(1468): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
E/AndroidRuntime(1468): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
E/AndroidRuntime(1468): ... 11 more 
E/AndroidRuntime(1468): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(1468): at com.DVA_HLUI.DVA_HLUISuperviseActivity.onCreate(DVA_HLUISuperviseActivity.java:41) 
E/AndroidRuntime(1468): at android.app.Activity.performCreate(Activity.java:4465) 
E/AndroidRuntime(1468): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
E/AndroidRuntime(1468): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
E/AndroidRuntime(1468): ... 21 more 

活动类别:

public class MyActivity extends ListActivity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_activity); 

     ListView listView = (ListView) findViewById(android.R.id.list); 

     listEntryClass listEntries[] = new listEntryClass[] 
     { 
      new listEntryClass("bla", "bla"), 
      new listEntryClass("bla", "bla") 
     }; 

     listEntryArrayAdapter adapter = new listEntryArrayAdapter(this, R.layout.list_entry_layout, listEntries); 

     TextView headerValue = (TextView) findViewById(R.id.list_header); 
     headerValue.setText(this.getString(R.string.headerSupervise)); 

     View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null); 
     listView.addHeaderView(header); 
     listView.setAdapter(adapter); 
} 

回答

8
TextView headerValue = (TextView) header.findViewById(R.id.list_header); 

应该从报头中引用视图。

因此,将您的代码更改为follwing。

View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null); 
    TextView headerValue = (TextView) header.findViewById(R.id.list_header); 
    headerValue.setText(this.getString(R.string.headerSupervise)); 

    listView.addHeaderView(header); 
    listView.setAdapter(adapter); 
+0

作品!!! THKS ......可以请你给我解释一下是什么问题? – Matteo

+1

我想我明白了:我从上下文中获取TextView headerValue,而不是从View标题获取。正确? – Matteo

+0

非常感谢您的迅速! ; D – Matteo

1

使用

View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null); 
TextView headerValue = (TextView)header . findViewById(R.id.list_header); 
headerValue.setText(this.getString(R.string.headerSupervise)); 

,而不是

TextView headerValue = (TextView) findViewById(R.id.list_header); 
headerValue.setText(this.getString(R.string.headerSupervise)); 

View header = (View)getLayoutInflater().inflate(R.layout.list_header_layout, null); 
相关问题