2016-10-18 8 views
-1

私はメインのアクティビティに9つのボタンがあり、クリックすると特定のフラグメントに移動します。メインスレッドでは重いです。どのようにコードサイズを減らすことができます。私の代わりに、ここで9つのボタン を定義するスイッチを使用することができ、アプリケーションが遅くなっかもしれない理由の主な活動コードAndroidの主なアクティビティが遅すぎる

MainActivity

package com.gowarbaam.baluchistannationalparty; 

import android.content.Intent; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

import com.gowarbaam.baluchistannationalparty.Fragments.AboutApp; 
import com.gowarbaam.baluchistannationalparty.Fragments.AboutParty; 
import com.gowarbaam.baluchistannationalparty.Fragments.Aims; 
import com.gowarbaam.baluchistannationalparty.Fragments.CityList; 
import com.gowarbaam.baluchistannationalparty.Fragments.Events; 
import com.gowarbaam.baluchistannationalparty.Fragments.History; 
import com.gowarbaam.baluchistannationalparty.Fragments.Martyrs; 
import com.gowarbaam.baluchistannationalparty.Fragments.TwitterMain; 

public class MainActivity extends AppCompatActivity { 

    FragmentManager mFragmentManager; 
    FragmentTransaction mFragmentTransaction; 

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

     mFragmentManager = getSupportFragmentManager(); 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 





      final Button HistoryBtn = (Button) findViewById(R.id.historyBtn); 
     HistoryBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new History()).commit(); 

      } 
     }); 

     final Button AimsBtn = (Button) findViewById(R.id.aimsBtn); 
     AimsBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new Aims()).commit(); 

      } 
     }); 

     final Button MembersBtn = (Button) findViewById(R.id.membersBtn); 
     MembersBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new CityList()).commit(); 

      } 
     }); 

     final Button PhotoBtn = (Button) findViewById(R.id.martyrsBtn); 
     PhotoBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new Martyrs()).commit(); 

      } 
     }); 

     final Button TweetBtn = (Button) findViewById(R.id.tweetsBtn); 
     TweetBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new TwitterMain()).commit(); 

      } 
     }); 

     final Button AboutParty = (Button) findViewById(R.id.aboutParty); 
     AboutParty.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new AboutParty()).commit(); 

      } 
     }); 

     final Button b = (Button) findViewById(R.id.eventsBtn); 
     b.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new Events()).commit(); 

      } 
     }); 

     final Button AboutApp = (Button) findViewById(R.id.aboutApp); 
     AboutApp.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.containerView, new AboutApp()).commit(); 

      } 
     }); 

} 

@Override 
public void onBackPressed() { 

    Intent myIntent = new Intent(this, MainActivity.class); 
    this.startActivity(myIntent); 

} 

} 
+0

に、あなたはどんな拡大イメージを持っていますか? – Knossos

+0

はい、あなたはより良いスイッチを使用することができます。しかし、あなたはコードの行数が少なく、なぜそれが遅いのですか?クノッソスが尋ねたようなレイアウトのイメージはありますか? – YLS

+0

あなたのコードはあまり遅れている理由ではないようです。正直言って、あなたのonBackPressedメソッドはあなたがしてはいけないことをやっています。 – Ricardo

答えて

0

一つの理由は、あなたがonBackPressed()イベントを処理する方法です。アプリケーションのどこにでも戻るボタンを押すたびに、新しいMainActivityを作成していますが、前のバージョンを終了することはありません。MainActivityは、すべてのバックプレスでアプリケーション全体を再作成します。

+0

次に、onBackPressed()イベントを適切な方法で処理する方法。私がこれを取り除くと、バックプレスアプリケーションでは、戻るのではなく終了するでしょうか? –

+0

getActivity()。getSupportFragmentManager()。beginTransaction()。remove(this).commit(); –

+0

あなたはナビゲーションを一切していません。あなたは、あなたが望むフラグメント遷移であなたのonBackPressを扱うべきです。どうやってそれを行うのかわからない場合は、Webにたくさんのドキュメントがあります。ハックを簡単にするには、finish()を呼び出します。 startActivity()の後に。 – Ricardo

0

あなたの問題はあなたのアクティビティクラスのためではなく、あなたのXMLファイルのようなものです。

何かあれば、テストのためだけに、各フラグメントにアクティビティを作成することをおすすめします。あなたは下の方法を見ることができます。

AboutAppActivity

package com.gowarbaam.baluchistannationalparty; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import com.gowarbaam.baluchistannationalparty.Fragments.AboutApp; 

public class AboutAppActivity extends AppCompatActivity { 

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

     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.containerView, new AboutApp()) 
       .commit(); 
    } 
} 

そして、あなたのMainActivity

public class MainActivity extends AppCompatActivity { 

    // This is not for performance, just DRY 
    private View.OnClickListener btnOnClickListener(final Class activityClass) { 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getApplicationContext(), activityClass); 
       startActivity(i); 
      } 
     }; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     (...) 
     final Button AboutApp = (Button) findViewById(R.id.aboutApp); 
     AboutApp.setOnClickListener(this.btnOnClickListener(AboutAppActivity.class)); 
    } 


} 
関連する問題