防止[游戏玩家ID]不断增加片段数

问题描述 投票:0回答:1

[我试图制作自己的Tic Tac Toe game,所以我创建了两个活动(MainActivity, GameActivity),第二个活动包含一个Fragment,显示gridView。为了存储乐谱和演奏者的名字,我创建了一个Player类,每个播放器都有一个唯一值ID,该值在构造播放器对象时生成。

import android.app.*;
import android.os.*;
import android.widget.*;
import android.view.View.*;
import android.view.*;
import android.content.*;

public class MainActivity extends Activity implements OnClickListener
{

    @Override
    public void onClick(View p1)
    {
        // TODO: Implement this method
        Intent i=new Intent(MainActivity.this,GameActivity.class);
        startActivity(i);
    }


    Button start;

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

         start=(Button)findViewById(R.id.start);

        start.setOnClickListener(this);
    }
}

GameActivity

public class GameActivity extends Activity 
{


Fragment fragment;

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

        getActionBar().hide();      
        loadFragment(fragment,savedInstanceState);


    }

    public void loadFragment(Fragment fragment,Bundle bundle){

        FragmentManager manager=getFragmentManager();
        FragmentTransaction transaction=manager.beginTransaction(); 

         fragment=new gameFragment();
        transaction.replace(R.id.grid_container,fragment,"this");
transaction.commit();


    }

    @Override
    protected void onDestroy()
    {
        // TODO: Implement this method
        super.onDestroy();

    }


}

GameFragment

public class gameFragment extends Fragment
{
    GameGridAdapter adapter;
    GridView gv;
     boolean isGameOver=false;
    Player playerOne,playerTwo,currentPlayer;

    @Override
    public void onAttach(Context context)
    {
        // TODO: Implement this method

        init();
        super.onAttach(context);

    }   

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // TODO: Implement this method
        View view=inflater.inflate(R.layout.fragment_layout_grid,container,false);  

        gv=(GridView)view.findViewById(R.id.grid);

        adapter=new GameGridAdapter(getActivity());

        gv.setAdapter(adapter);
        Toast.makeText(getContext(),"player id "+ playerOne.getId(),Toast.LENGTH_SHORT).show();

        gv.setOnItemClickListener(new AdapterViewAnimator.OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> p1, View view, int pos, long viewId)
                {
                // TODO: Implement this method

        return view;

        }

        public void init(){     

                playerOne=new Player();

            playerTwo=new Player();


        }
}

我的问题是,每当我按下gameFragment中的返回按钮并第二次返回它时,Player对象中的id就会增加,就像我创建一个新对象一样。

android fragment
1个回答
1
投票
事实是-您每次都在创建一个新对象。有几种方法可以使对象更具持久性:从容易到复杂。

对于您的特定情况-建议您在Application类中创建并存储您的播放器。 https://developer.android.com/reference/android/app/Application

您将必须创建android.app.Application的实现

class MyApplication extends Application { public Player player1; public Player player2; @Override public void onCreate() { super.onCreate(); player1 = new Player(); player2 = new Player(); } }

不要忘记在AndroidManifest.xml中提及它>

<application android:name=".MyApplication"> </application>

然后通过获取应用程序上下文来访问播放器对象:

Player player1 = ((MyApplication) getActivity().getApplicationContext()).player1; Player player2 = ((MyApplication) getActivity().getApplicationContext()).player2;

[我不得不警告您,这种方法很少被推荐,并且要向您指出一些依赖注入框架,例如DaggerKoin (for Kotlin)

此外,如果您的应用程序被用户或系统破坏,则这些对象将消失。

© www.soinside.com 2019 - 2024. All rights reserved.