0

わかりました...TextViewへのテキストに影響を与えようとしています(テキストを表示することを目的としているためですよね?)しかし、私にはわからない理由で、入力したものを印刷することを拒否します。

私のアプリケーションには、MainAcivity(ウェルカム画面)自体とGameActivity(プロジェクトはDominoゲーム)の2つのアクティビティがあります。

GameActivityクラスの最初に以前に作成したJavaオブジェクトを作成し、TextView内にプレーヤーの名前を表示しようとしています。

Player player1 = new Player("Hulk"); 

ご想像のとおり、ハルクという名前のプレーヤーを作成します。Player.java内に、プレーヤーの名前を返すメソッドがあります。

player1.getName()

文字列「ハルク」を返します

次に、TextViewのテキストをハルクに設定しようとします。まず、次のコマンドでハンドルを作成します。

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内で同じことをしようとすると、次のように機能します。public class

@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:

パッケージdomino.asd;

LI260をインポートします。*; import android.app.Activity; android.os.Bundleをインポートします。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>
4

1 に答える 1

3

アクティビティを最初にロードするときは、次のコードを呼び出しています。

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

しかし、ユーザーがボタンをクリックすると、次のコードのみが呼び出されます。

   setContentView(R.layout.game);

メインコンテンツビューをリセットしたため、R.layout.gameからインフレートすると、子ビューmainview_playerが破棄され、新しいビューに置き換えられました。

ゲームレイアウトで新しいビューを見つけてプレーヤー名を入力するには、このコードをもう一度呼び出す必要があります。

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

アクティビティが互いにどのように関連しているかを調べて、R.layout.gameの新しいアクティビティを開始することをお勧めします。

于 2013-03-08T18:41:23.863 に答える