0

I have just started learning Android programming. I am making a simple Tic Tac Toe game using buttons. The game is working as i intended but I want to add a "LogActivity" to view the winners

here is video of what i am wanting to make https://www.youtube.com/watch?v=Y7D1FFx7B78

here is video of what I have made so far https://www.youtube.com/watch?v=8vwJh3gWeaw

here is main part from my code for 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");
    }

another part from for from TicTacToeActivity for LogActivity I don't want to store it into database right now. So I just want to list the either X Wins or O Wins or the game is a Draw. I tried to get it working using ListView but I don't have enough knowledge. I googled but could not find what I am looking for

i have commented the codes i tried but didn't worked

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();


    }
});

here is activity_log.xml for UI

          <?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>
robinleathal
  • 251
  • 6
  • 24
  • You should read [How do I compare strings in Java?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java). – Code-Apprentice Sep 19 '16 at 23:50

1 Answers1

1

Log is used for log files (errors, debugging, etc.) and shouldn't be used for displaying info in your application views.

I understand a DB is overkill for this, but you'll probably want to use some sort of persistent data storage Data Options. In your case you'll probably want to save a list to internal storage in your Tic Tac Toe activity which can be read in your LogActivity.

If you want to avoid storing anything to the disk, a questionable way to solve your problem would be to store game results to a list and pass the list back and forth between your activities as an intent extra.

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());
    }
}
jtwaller
  • 120
  • 7
  • I tried to use intent's putExtra and getExtra for it. However, I am not able to make it work when i apply it with ListView. When I search for ListView i found people using Adapters but I could not apply it correctly as I am newbie. ListView is needed in this case because I need to iterate the game winners list. – robinleathal Sep 20 '16 at 01:31
  • ListView isn't needed. You can build a string from your ArrayList and then set the text in a TextView. But if you insist on using a ListView, I've edited my answer to add a simple example that will get you up and running. – jtwaller Sep 20 '16 at 17:37