2016-10-18 2 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

당신은 어떤 큰 이미지를 가지고 마십시오 MainActivity에? – Knossos

+0

예 스위치를 더 잘 사용할 수 있습니다. 그러나 코드의 줄 수가 적고 느린 이유는 무엇입니까? Knossos가 묻는 것처럼 레이아웃에 이미지가 있습니까? – YLS

+0

코드가 그다지 지연되지 않는 것 같습니다. 그리고 솔직히 말해서, onBackPressed 메서드는 당신이하지 말아야 할 일을하고 있습니다. – Ricardo

답변

0

이유 중 하나는 당신이 onBackPressed() 이벤트를 처리하는 방법입니다. 앱의 어느 곳에서나 새로운 MainActivity를 생성 할 때마다 뒤로 버튼을 누를 때마다 이전 MainActivity를 끝내지 않고 MainActivity를 사용하기 때문에 매번 모든 언론에서 전체 애플리케이션을 재생성합니다.

+0

그런 다음 onBackPressed() 이벤트를 적절한 방법으로 처리하는 방법. 내가 언론 보도에서 이걸 제거하면 다시 돌아 다니지 않고 끝날거야? –

+0

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

+0

당신은 네비게이션을 전혀하지 않습니다 .. 원하는 조각 전환으로 onBackPress를 다루어야합니다. 어떻게하는지 모르는 경우에는 웹에 많은 설명서가 있습니다. 해킹을 쉽게하려면 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(); 
    } 
} 

그리고

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)); 
    } 


}