Android TextView不显示受影响的文本

时间:2013-03-08 18:29:35

标签: android textview

好的......我一直在尝试将文本影响到TextView(因为它意味着显示文本,对吧?) 但对于一些我不知道的原因,它拒绝打印我投入的任何内容。

我的应用程序有两个活动,MainAcivity或欢迎屏幕本身,以及GameActivity(该项目是一个Domino游戏)。

我在GameActivity类的开头创建我以前编写的java对象,然后尝试在TextView中显示玩家的名字。

Player player1 = new Player("Hulk"); 

创建一个名为Hulk的玩家,你可以想象。我在Player.java中有一个方法来返回玩​​家的名字:

player1.getName()

返回字符串“Hulk”

然后我尝试将TextView的文本设置为hulk,首先通过创建一个句柄来实现:

TextView p1v = (TextView) findViewById(R.textviews.p1view);

然后执行以下操作:

p1v.setText("Player 1 : " + player1.toString());

p1view在game.xml布局中定义如下:

<LinearLayout
 ...
   <LinearLayout
 ...
         <TextView
            android:id="@+textviews/p1view"
            android:text="Board"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
   </LinearLayout>
</LinearLayout>

我尝试了p1view.textAppend,尝试使用android:editable =“true”。似乎没什么用。

有趣的是,当我尝试在MainActivity中做同样的事情时,它的工作原理如下: 公共课

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

使用在main.xml中定义的TextView,如下所示:

 <TextView
        android:id="@+textviews/mainview_player"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
  />

以下是文件的完整代码,只是为了避免以下答案:给我们完整的代码D:

GameActivity.java:

  

package domino.asd;

     

导入LI260。*; import android.app.Activity; import android.os.Bundle;   import android.widget.TextView;

     

公共类GameActivity扩展了Activity {

private Player player1 = new Player("HULK");
private Player player2 = new Player("CPU");
private Pioche bag = new Pioche();
private Plateau board = new Plateau();
private Game game1 = new Game(bag, board, player1, player2);
TextView p1name = null;
TextView p2name = null;

/**
 * Called when the activity is first created.
 *
 * @param savedInstanceState
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);
    TextView tv = (TextView) findViewById(R.textviews.p1view);
    tv.setText(player1.getName());
}    }

game.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:weightSum="10"

>
    <!-- Played layout -->
    <LinearLayout
        android:id="@+drawable/gameview_Scores"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_gravity="top"
        android:layout_weight="2"
        android:layout_marginBottom="10px"
        android:orientation="horizontal"
        android:background="#ff0000"
        android:gravity="center"
    >
        <Button
            android:id="@+buttons/exitButton"
            android:text="Exit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            />

        <Button
            android:id="@+buttons/drawButton"
            android:text="Draw"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />

        <Button
            android:id="@+buttons/scoresButton"
            android:text="Show scores"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />
    </LinearLayout>

    <!-- Board layout -->
    <LinearLayout
        android:id="@+textviews/gameview_Table"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_gravity="center"
        android:layout_weight="6"
        android:layout_marginBottom="10px"
        android:background="#ffff00"
    >
        <TextView
            android:id="@+textviews/p1view"
            android:text="Board"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
    </LinearLayout>

    <!-- At hand layout -->
    <LinearLayout
        android:id="@+drawable/gameview_Playable"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="2"
        android:layout_gravity="bottom"
        android:background="#ff00ff"
    >
        <TextView
            android:id="@+textviews/gameview_AtHandText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
    </LinearLayout>
</LinearLayout>

MainActivity.java:

package domino.asd;

import LI260.*;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    Player p1 = new Player("Hulk");
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView p1view = (TextView) findViewById(R.textviews.mainview_player);
        p1view.setText(p1.getName());
    }

    public void btnClick_Name(View view) {

        if (view.getId() == R.buttons.B_EnterName) {
            EditText playersname = (EditText) findViewById(R.string.playerNameInput);
            Toast.makeText(this, "Your name: " + playersname.getText().toString(), Toast.LENGTH_SHORT).show();

        }

        setContentView(R.layout.game);
    }
}

最后是main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
>
    <EditText
        android:id="@+string/playerNameInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:lines="1"
        />

    <TextView
        android:id="@+textviews/mainview_player"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <Button
        android:id="@+buttons/B_EnterName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Save name and start game."
        android:onClick="btnClick_Name"
      />

</LinearLayout>

1 个答案:

答案 0 :(得分:3)

首次加载活动时,您正在调用此代码:

setContentView(R.layout.main);
TextView p1view = (TextView) findViewById(R.textviews.mainview_player);
p1view.setText(p1.getName());

然而,当用户点击按钮时,您只需要调用此代码:

   setContentView(R.layout.game);

由于您已重置主内容视图,子视图mainview_player已被销毁,并在从R.layout.game中膨胀时替换为新视图。

您需要再次调用此代码才能在游戏布局中找到新视图并使用您的播放器名称填充它:

TextView p1view = (TextView) findViewById(R.textviews.mainview_player);
p1view.setText(p1.getName());

您最好先了解一下活动如何相互关联,并为R.layout.game开始一项新活动