2013-03-27 153 views
1

我想調用另一個片段的方法,但它不斷告訴我,我的TextViews的值爲空..?如何從另一個片段類訪問一個方法?

PLAYER1:

public class PlayerTurn1 extends Fragment { 

    TextView p1Name; 
    TextView p1Icon; 
    Button doneP1; 
    Button resetP1; 
    EditText row; 
    EditText column; 
    TicTacToeLayout myObject = new TicTacToeLayout(); 
    ArrayList<String> player1; 
    Bundle extras = new Bundle(); 
    int turn = 1; 

public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     extras = getArguments(); 

     player1 = new ArrayList<String>(extras.getStringArrayList("player1")); 

     Toast.makeText(getActivity(), player1.get(0), Toast.LENGTH_LONG).show();//Name of the player 
     Toast.makeText(getActivity(), player1.get(1), Toast.LENGTH_LONG).show();//Icon chosen by the player 

     row = (EditText) getActivity().findViewById(R.id.rowP1); 
     column = (EditText) getActivity().findViewById(R.id.columnP1); 
     p1Name = (TextView) getActivity().findViewById(R.id.p1NameInfo); 
     p1Icon = (TextView) getActivity().findViewById(R.id.p1IconInfo); 
     doneP1 = (Button) getActivity().findViewById(R.id.doneP1); 
     resetP1 = (Button) getActivity().findViewById(R.id.resetP2); 

     setPlayer(); 


     doneP1.setOnClickListener(new View.OnClickListener() {   
      public void onClick(View v) { 

       if(checkField() != false) 
       { 
        int rowValueInt = Integer.parseInt(row.getText().toString()); 
        int colValueInt = Integer.parseInt(column.getText().toString()); 

        myObject.play(rowValueInt, colValueInt, player1.get(1)); 
        callPlayer2Fragment(); 

       } 


      } 
     }); 
    } 

玩家2片段是完全一樣的代碼,所以我不會打擾添加。

TicTacToeLayout片段類:

public class TicTacToeLayout extends Fragment { 

    TextView image1, image2, image3, image4, image5, image6, image7, image8, image9; 
    TextView[][] images; 


    public View onCreateView(LayoutInflater inflater, 
    ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.tictactoe_layout, container, false); 
    } 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 


     image1 = (TextView) getActivity().findViewById(R.id.Image1); 
     image2 = (TextView) getActivity().findViewById(R.id.Image2); 
     image3 = (TextView) getActivity().findViewById(R.id.Image3); 
     image4 = (TextView) getActivity().findViewById(R.id.Image4); 
     image5 = (TextView) getActivity().findViewById(R.id.Image5); 
     image6 = (TextView) getActivity().findViewById(R.id.Image6); 
     image7 = (TextView) getActivity().findViewById(R.id.Image7); 
     image8 = (TextView) getActivity().findViewById(R.id.Image8); 
     image9 = (TextView) getActivity().findViewById(R.id.Image9); 

     images = new TextView[][]{ {image1, image2, image3}, 
            {image4, image5, image6}, 
            {image7, image8, image9} }; 

     toast(); 
    } 

    public void toast() 
    { 
     Toast.makeText(getActivity(), images[0][0].getText().toString(), Toast.LENGTH_LONG).show(); 
     Toast.makeText(getActivity(), images[0][1].getText().toString(), Toast.LENGTH_LONG).show(); 
     Toast.makeText(getActivity(), images[0][2].getText().toString(), Toast.LENGTH_LONG).show(); 
     Toast.makeText(getActivity(), images[1][0].getText().toString(), Toast.LENGTH_LONG).show(); 
    } 

    public void play(int row, int column, String icon) 
    { 
      images[row-1][column-1].setText(icon); 
    } 

} 

我只是做了嘗試和烤麪包片只是爲了確保有東西在數組中和它的工作方法。但是,只有在創建片段時纔會提供一些東西。不知何故,在方法調用myObject.play(rowValueInt, colValueInt, player1.get(1)); 後,調試器告訴我,我的圖像的所有值都爲空。

這是調試器這樣說:

this TicTacToeLayout (id=830016401072) 
    image1 null  
    image2 null  
    image3 null  
    image4 null  
    image5 null  
    image6 null  
    image7 null  
    image8 null  
    image9 null  
    images null  

row 1 
column 2 
icon "O" (id=830016398920) 

當我點擊完成按鈕這基本上發生。應該發生的事情是當玩家點擊按鈕時,TicTacToeLayout片段中的文本視圖位於玩家輸入的任何行和列改變爲X或O.行,列和圖標都有它們各自的值,但是在對象調用後圖像結束爲空。有任何想法嗎?我的線程已關閉,因爲顯然我沒有提供太多的信息,管理員生氣,所以如果你需要任何東西,只要告訴我,我會更新。位於PlayerTurn1

點擊完成按鈕時
public void callPlayer2Fragment() 
    { 
     FragmentManager fm  = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     Fragment Player2Frag = new PlayerTurn2(); 
     Player2Frag.setArguments(extras); 
     ft.replace(R.id.fragment_container, Player2Frag); 
     ft.commit(); 
    } 

第二個玩家片段

編輯 調用,PlayerTurn2片段將被調用並且從這個類的論點,但這個片段被替換。

XML佈局

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

     <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="0px" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 

     <fragment 
      android:id="@+id/frag2" 
      android:name="As2.packageTK.TicTacToeLayout" 
      android:layout_width="0px" 
      android:layout_height="match_parent" 
      android:layout_weight="1" /> 

    </LinearLayout> 

回答

0

原因他們都是空的是因爲片段不是「活着」(即附加或創建)。您應該通過活動中的界面來完成。我解釋它here

+0

我會給它另一個鏡頭 – Morpheglus 2013-03-27 06:22:54

+0

我剛剛看到你對其他建議的答案的評論。如果當前未連接,則無法更新片段。當你再次附加它時(通過將它放在FrameLayout或其他東西中),將相關的更新信息傳遞給你的Fragment。 – 2013-03-27 06:27:06

+0

嗯,這就是我在做什麼。我會更新並向您顯示我的XML並致電給它。查看我的新更新問題 – Morpheglus 2013-03-27 06:30:43