java - 如何使用Android App的ListView生成游戏日志列表?

标签 java android android-layout listview android-studio

我刚刚开始学习Android编程。我正在使用按钮制作一个简单的井字游戏。游戏正在按我的预期运行,但我想添加一个“LogActivity”来查看获胜者

这是我想要制作的视频 https://www.youtube.com/watch?v=Y7D1FFx7B78

这是我迄今为止所做的视频 https://www.youtube.com/watch?v=8vwJh3gWeaw

这是我的 TicTacToeActivity.java 代码的主要部分

public void buttonClicked(Button btn){
    if (turn){
        btn.setText("X");
        TextView textView = (TextView) findViewById(R.id.turn_display);
        textView.setText(R.string.o_turn);
    }
    else {
        btn.setText("O");
        TextView textView = (TextView) findViewById(R.id.turn_display);
        textView.setText(R.string.x_turn);
    }
    turnCount++;
    //need to prevent button click once clicked
    btn.setClickable(false);
    turn = !turn;
    //check winner
    checkWinner();
}
private void checkWinner(){
    //check if already winner
    boolean winnerExist = false;
    //horizontal check
    if (btnTopLeft.getText() == btnTopCenter.getText()  && btnTopCenter.getText()== btnTopRight.getText() && !btnTopLeft.isClickable()){
        winnerExist = true;
    }
    else if (btnMidLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnMidRight.getText() && !btnMidLeft.isClickable()){
        winnerExist = true;
    }
    else if (btnBottomLeft.getText()== btnBottomCenter.getText() && btnBottomCenter.getText() == btnBottomRight.getText() && !btnBottomLeft.isClickable()){
        winnerExist = true;
    }
    //vertical checks
    else if (btnTopLeft.getText() == btnMidLeft.getText() && btnMidLeft.getText() == btnBottomLeft.getText() && !btnTopLeft.isClickable()){
        winnerExist = true;
    }
    else if (btnTopCenter.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnBottomCenter.getText() && !btnTopCenter.isClickable()){
        winnerExist = true;
    }
    else if (btnTopRight.getText() == btnMidRight.getText() && btnMidRight.getText() == btnBottomRight.getText() && !btnTopRight.isClickable()){
        winnerExist = true;
    }
    //diagonal check
    else if (btnTopLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText()== btnBottomRight.getText() && !btnTopLeft.isClickable()){
        winnerExist = true;
    }
    else if (btnBottomLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnTopRight.getText() && !btnBottomLeft.isClickable()){
        winnerExist = true;
    }

    if (winnerExist){
        if (!turn) {
            // X wins toast("X wins");
            TextView textView = (TextView) findViewById(R.id.turn_display);
            textView.setText(R.string.x_win);
            logCount++;
            Log.i("log", "X");


        }
        else {
            TextView textView = (TextView) findViewById(R.id.turn_display);
            textView.setText(R.string.o_win);
            logCount++;
            Log.i("log", "O");
        }
        //call generic method
        enableDisableButtons(false);
    }
    else if (turnCount == 9){
        TextView textView = (TextView) findViewById(R.id.turn_display);
        textView.setText(R.string.game_tie);
        logCount++;
        Log.i("log", "Draw");
    }

来自 TicTacToeActivity 的另一部分 LogActivity 我现在不想将其存储到数据库中。所以我只想列出 X 胜或 O 胜,或者比赛是平局。我尝试使用 ListView 让它工作,但我没有足够的知识。我用谷歌搜索但找不到我要找的东西

我已经评论了我尝试过但不起作用的代码

btnLog.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
        Intent logIntent = new Intent(TicTacToeActivity.this, LogActivity.class);
        //TextView log_view = (TextView) findViewById(R.id.log_list);
        //logIntent.putExtra("log_view", R.id.log_list);
        startActivity(logIntent);

        //Intent logIntent = new Intent(TicTacToeActivity.this, LogActivity.class);
        //TextView log_view = (TextView) findViewById(R.id.log_list);
        //logIntent.putExtra("log_view", R.id.log_list);


        //addIntent.putExtra("num2display", num2input.getText().toString());
        //LogList
        //startActivity(logIntent);
        //startActivity(LogIntent);

        //list = (ListView) findViewById(R.id.list);

        //add();


    }
});

这里是 UI 的 Activity_log.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="edu.uco.rawal.p3rabina.LogActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/message"
        android:textSize="30sp"
        android:text="@string/log_button" />





    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/log_block"
        android:background="@color/colorPrimaryDark"

        android:layout_below="@+id/message"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true">


        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/numColumn"
            android:text="@string/s_num"
            android:textColor="@color/colorWhite"
            android:textSize="26sp"
            android:layout_weight="1"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/result"
            android:text="@string/result"
            android:textColor="@color/colorWhite"
            android:textSize="26sp"
            android:layout_weight="1"/>


    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/log_block">
        <ListView
            android:id="@+id/list_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:background="@android:color/darker_gray" />
    </LinearLayout>



</RelativeLayout>

最佳答案

日志用于日志文件(错误、调试等),不应用于在应用程序 View 中显示信息。

我知道数据库对此来说太过分了,但您可能想使用某种持久数据存储 Data Options 。在您的情况下,您可能希望将列表保存到 Tic Tac Toe Activity 的内部存储中,该列表可以在 LogActivity 中读取。

如果您想避免将任何内容存储到磁盘上,解决问题的一个有问题的方法是将游戏结果存储到一个列表中,并在您的 Activity 之间来回传递该列表作为 Intent 额外。

MainActivity.java

ArrayList<String> myList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Sample results added to your ArrayList
    myList.add("X");
    myList.add("O");
    myList.add("Draw");

    Button b = (Button) findViewById(R.id.listPasser);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, ListActivity.class);

            // Add the extra to the intent and use it to call the next activity
            intent.putExtra("resultsLog", myList);
            startActivity(intent);
        }
    });

}

ListActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);

    // Get your list from the intent you made in MainActivity
    ArrayList<String> myList = getIntent().getExtras().getStringArrayList("resultsLog");

    ListView lv = (ListView) findViewById(R.id.listView);

    ListAdapter adapter = new ArrayAdapter<>(
            this,
            android.R.layout.simple_list_item_1,
            myList);

    lv.setAdapter(adapter);

//        Easier way to do things if you want to use TextView instead of ListView
//        StringBuilder output = new StringBuilder();
//        for(String s : myList) {
//            output.append(myList.indexOf(s) + " " + s + System.getProperty("line.separator"));
//        }
//
//        lv.setText(output.toString());
    }
}

关于java - 如何使用Android App的ListView生成游戏日志列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581933/

相关文章:

java - 带注释的类是否有通配符

android - 如何在 Android 的 ListView 中显示音频文件?

android - 查找 ViewGroup 中布局请求的原因

java - JSTL、Bean 和方法调用

java - jsf 2在延迟+闪烁后从bean更新UI

java - Selenium WebDriver 测试后无法关闭 Firefox 窗口 (Java)

php - 在 PHP 中使用 Parse 将相同的通知推送到多个 Android 设备

android - 在另一个布局中扩充一个布局

java - 如何在 Java/Android 中重用内部类?

android - 在动态 ListView 中的第一个 EditText 上设置 RequestFocus