繁体   English   中英

如何通过按钮在片段之间切换

[英]How to switch between Fragments through buttons

我正在构建一个应用程序。 我有一个片段持有人的概述屏幕,我想在其他屏幕上使用片段:组/聊天/搜索/设置。 以下是我的OverviewActivity

public class Overview extends AppCompatActivity implements View.OnClickListener{
    ImageButton btn_search, btn_groups, btn_chat, btn_settings;
    android.app.FragmentManager manager = getFragmentManager();
    android.app.FragmentTransaction transaction = manager.beginTransaction();
    SettingsFrg frg = new SettingsFrg();
    ChatFrg chfrg = new ChatFrg();
    GrouFrg grpfrg = new GrouFrg(); 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overview);
        loadUI();
        transaction.add(R.id.frg_holder,frg,"SRCHFRG");

    }

    private void loadSettingsFrg() {
        transaction.add(R.id.frg_holder,frg, "SRCHFRG");
        transaction.addToBackStack(null);
        transaction.commit();
    }

    private void loadUI() {
        btn_chat = (ImageButton) findViewById(R.id.chatBtn);
        btn_search = (ImageButton)findViewById(R.id.searchBtn);
        btn_settings = (ImageButton)findViewById(R.id.settingsBtn);
        btn_groups = (ImageButton) findViewById(R.id.groupsBtn);
        btn_chat.setOnClickListener(this);
        btn_groups.setOnClickListener(this);
        btn_settings.setOnClickListener(this);
        btn_search.setOnClickListener(this);

    }


    public void onClick(View view){
    switch (view.getId()){
        case R.id.chatBtn:
            loadChatFrg();
            Toast.makeText(Overview.this, "go to chat", Toast.LENGTH_SHORT).show();
            break;
        case R.id.searchBtn:
            loadSettingsFrg();
            Toast.makeText(Overview.this, "go to search", Toast.LENGTH_SHORT).show();
            break;
        case R.id.settingsBtn:
            Toast.makeText(Overview.this, "go to settings", Toast.LENGTH_SHORT).show();
            break;
        case R.id.groupsBtn:
            loadGrouFrg();
            Toast.makeText(Overview.this, "go to groups", Toast.LENGTH_SHORT).show();
            break;

    }

    }

    private void loadGrouFrg() {

        transaction.replace(R.id.frg_holder,grpfrg,"GRPFRG");
        transaction.addToBackStack(null);
        transaction.commit();
    }

    private void loadChatFrg() {
        transaction.replace(R.id.frg_holder,chfrg,"CHTFRG");
        transaction.addToBackStack(null);
        transaction.commit();
    }
}

到目前为止,我只能加载一个片段,每当尝试替换它时,应用程序就会崩溃。 链接到git

尝试使用此功能切换片段

public void switchFragment(final Fragment fragment, final String tag) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (fragment != null) {
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.frg_holder, fragment, tag).addToBackStack(null).commitAllowingStateLoss();
            }
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM