片段的更好按钮功能 - Android



我是Android编程的新手,因此我需要一些帮助解决以下问题。我需要知道在使用片段时是否有更好的方法可以添加按钮功能。我正在研究一个有三个活动的应用程序。但是,第二个活动(请参见下面的代码)是完成应用程序的所有繁重举重的最重要和最大的活动。在此(第二个)活动(" dmpact.java")中,我有一个片段容器(" r.id.dmpfragcontainer"),其中15个不同的片段被滚出并显示给用户 - 一次 - 根据什么 - 取决于什么用户想做。因此,当" dmpact.java"类开始时,将欢迎片段加载到" dmpfragcontainer"容器中,然后用户单击一个按钮进入下一个片段 - 该片段替换了欢迎片段,并用按钮调用哪个片段点击了。

困境:当前," dmpact.java"除了夸大布局(UI)并在单击按钮时成功滚出各种片段之外,没有做其他事情。我正在使用" DMPACT"活动的根部实现一个onclicklistener,因为我在此活动中使用了精确的10个按钮。我还使用自定义片段动画(翻转动画)来进行所有片段。我还需要ID用户当前加载哪些片段和可见的片段(对于后续的交互),因此我为每个片段提供了一个唯一的标签进入" dmpfragcontainer"。

...下面是第二个活动的代码-DMPACT.JAVA ...

package com.wesoft.forgetfulme;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
public class DmpAct extends Activity implements OnClickListener {
Fragment fragment;
Fragment newFragment;
String activeFrag;
FragmentManager FragMan;
FragmentTransaction TransAct;
Button birtListBtn, evenListBtn, appoListBtn, todoListBtn, specListBtn, dmpAddBtn, dmpExitBtn;

@SuppressLint({ "NewApi", "CommitTransaction" })
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Hide the Title Bar of the Application --> Must come before setting the Layout...
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // Hide the Status Bar of Android OS --> Can also be done later...
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    // Now you can draw the second Layout --> DMP Screen of the Application...
    setContentView(R.layout.dmp_act);
    // Instantiate the FragmentManager and FragmentTranstion...
    FragmentManager FragMan = getFragmentManager();
    FragmentTransaction TransAct = FragMan.beginTransaction();

    // Define or set the initial/start fragment to be loaded when the view is rendered...
    DMPWelcFrag startFragment = new DMPWelcFrag();
    TransAct.add(R.id.dmpFragContainer, startFragment);
    TransAct.commit();

    // Instantiate (or get references to) all buttons laid out in this Activity and set the onClickListeners...
    Button birtListBtn = (Button) findViewById(R.id.dmp_bir_btn);
    birtListBtn.setOnClickListener(this);
    Button evenListBtn = (Button) findViewById(R.id.dmp_eve_btn);
    evenListBtn.setOnClickListener(this);
    Button appoListBtn = (Button) findViewById(R.id.dmp_app_btn);
    appoListBtn.setOnClickListener(this);
    Button todoListBtn = (Button) findViewById(R.id.dmp_tod_btn);
    todoListBtn.setOnClickListener(this);
    Button specListBtn = (Button) findViewById(R.id.dmp_spe_btn);
    specListBtn.setOnClickListener(this);
    Button dmpAddBtn = (Button) findViewById(R.id.dmp_add_btn);
    dmpAddBtn.setOnClickListener(this);
    Button dmpExitBtn = (Button) findViewById(R.id.dmp_exi_btn);
    dmpExitBtn.setOnClickListener(this);
}
@Override
protected void onStart() {
    super.onStart();        
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.dmp, menu);
    return true;
}
@Override
@SuppressLint("NewApi")
public void onClick(View v) {
    // Set the DMP CATEGORY and ACTION Buttons Actions here ...
    if (v.getId() == R.id.dmp_bir_btn) {
        newFragment = new BirtListFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "BLF");
        TransAct.addToBackStack("BLF");
        TransAct.commit();
        // Toast.makeText(this, "This Fragment's tag is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else if (v.getId() == R.id.dmp_eve_btn) {
        newFragment = new EvenListFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "ELF");
        TransAct.addToBackStack("ELF");
        TransAct.commit();
    }
    else if (v.getId() == R.id.dmp_app_btn) {
        newFragment = new AppoListFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "ALF");
        TransAct.addToBackStack("ALF");
        TransAct.commit();
    }
    else if (v.getId() == R.id.dmp_tod_btn) {
        newFragment = new TodoListFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "TLF");
        TransAct.addToBackStack("TLF");
        TransAct.commit();
    }
    else if (v.getId() == R.id.dmp_spe_btn) {
        newFragment = new SpecListFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "SLF");
        TransAct.addToBackStack("SLF");
        TransAct.commit();
    }
    else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "BLF") {
        newFragment = new BirtEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "BEF");
        TransAct.addToBackStack("BEF");
        TransAct.commit();
        // Toast.makeText(this, "This Fragment's tag is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "ELF") {
        newFragment = new EvenEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "EEF");
        TransAct.addToBackStack("EEF");
        TransAct.commit();
        // Toast.makeText(this, "This Fragment's tag is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "ALF") {
        newFragment = new AppoEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "AEF");
        TransAct.addToBackStack("AEF");
        TransAct.commit();
        // Toast.makeText(this, "This Fragment's tag is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "TLF") {
        newFragment = new TodoEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "TEF");
        TransAct.addToBackStack("TEF");
        TransAct.commit();
        // Toast.makeText(this, "The tag of this fragment is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "SLF") {
        newFragment = new SpecEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "SEF");
        TransAct.addToBackStack("SEF");
        TransAct.commit();
        // Toast.makeText(this, "The tag of this fragment is  ...  " + newFragment.getTag() , Toast.LENGTH_SHORT).show();
    }
    else {
        newFragment = new DMPWelcFrag();
    };

    // Set the DMP EXIT Button Action here ...
    if (v.getId() == R.id.dmp_exi_btn) {
        Intent go2Main = new Intent(DmpAct.this, MainAct.class);                  
        startActivity(go2Main);
    }
    else;
};
}

问题:问题是,目前如代码(上面列出),甚至没有执行" dmpact.java"活动的一半,只是看一下...代码已经是。仍然有文本和其他输入验证(从这里的代码列表中不明显 - 仍在待处理),需要在每个按钮点击时完成,然后需要将输入的值保存在捆绑包中(并保存到该本地数据库文件中移动设备)在输入数据传递给下一个片段以显示向用户显示。现在,从这个代码中可以明显看出...

else if (v.getId() == R.id.dmp_add_btn && newFragment.getTag() == "BLF") {
        newFragment = new BirtEditFrag();
        FragmentTransaction TransAct = getFragmentManager().beginTransaction();
        TransAct.setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out);
        TransAct.replace(R.id.dmpFragContainer, newFragment, "BEF");
        TransAct.addToBackStack("BEF");
        TransAct.commit();  

...当单击"添加"按钮时,它会检查以查看当前在" DMPFragContainer"中加载的片段(使用在最后一个片段上提供的标签),并加载下一个正确的片段。现在,尽管这个过程是简单的,但对于我来说,代码对我来说似乎太笨重了,对于此活动中使用的所有10个按钮,我都做了完全相同的过程!所以我需要帮助。是否有更好的方法在不编写太多代码并重复相同代码15或更多次的情况下实施相同的操作?

请伙计们,我知道当" dmpact.java"类文件扩展以添加更多功能时,这将给我带来性能问题。因此,任何建议和帮助都将受到赞赏。提前致谢。

欢呼,Silsur。

我不知道这是否会引起性能问题,但我很确定您可以重新组织一些代码。开始使用Interfaces而不是具有IF Switch。因此,创建一个使用方法的方法,该方法是所有片段中常见的,并将实现添加到片段类中。然后,您可以使用接口调用您希望出现的片段的方法。您还可以创建一个方法fragmentType,该方法将返回活跃的片段的类型。只需与周围的接口一起播放。

最新更新