2016-09-19 53 views
0

我刚开始学习Android编程。我正在使用按钮制作一个简单的Tic Tac Toe游戏。但本场比赛是工作,我打算我想添加一个“LogActivity”查看获奖者如何使用ListView for Android App生成游戏日志列表?

这里是我想使 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 Wins或O Wins,或者游戏是Draw。我试图让它使用ListView工作,但我没有足够的知识。我用Google搜索,但没有找到什么,我找

我评论过我尝试了代码,但没有工作

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


    } 
}); 

这里是activity_log.xml的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> 
+0

你应该阅读[我如何在Java中比较字符串?](http://stackoverflow.com/questions/513832 /怎么办 - 我 - 比较 - 字符串,在Java的)。 –

回答

1

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

我明白了一个DB是矫枉过正,但你可能想使用某种形式的持久性数据存储Data Options。在你的情况下,你可能想要将一个列表保存到你的井字游戏活动的内部存储中,这可以在你的LogActivity中读取。

如果你想避免任何存储到磁盘,来解决你的问题就来存储游戏结果的列表,并通过列表中来回你的活动之间作为额外的意图有问题的方式。

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()); 
    } 
} 
+0

我试图使用intent的putExtra和getExtra。但是,当我将其应用于ListView时,我无法使其工作。当我搜索ListView时,我发现有人使用适配器,但我无法正确应用它,因为我是新手。在这种情况下需要ListView,因为我需要迭代游戏获胜者列表。 – robinleathal

+0

ListView不是必需的。你可以从你的ArrayList中建立一个字符串,然后在TextView中设置文本。但是,如果你坚持使用ListView,我已经编辑了我的答案,添加了一个简单的例子来启动和运行。 – jtwaller