2017-11-14 4 views
0

私は3つの活動を探検/取引とパッケージを作成しました。私は引き出しレイアウトを使用してメニューを作成しました。私は各アクティビティ画面でメニューアイコンを見たいと思います。メニュー項目の基本アクティビティを作成し、すべてのアクティビティに拡張しました。私は自分のhomeactivityコード、ベースのアクティビティコードを付加し、ここですべてのアクティビティでメニューとタイトルを表示するには?

enter image description here

enter image description here の下にアクティビティコードを探求しています。ここ

package com.example.windows81.travelspoc; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

public class ExploreActivity extends BaseActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_explore); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    //getMenuInflater().inflate(R.menu.menu_second, menu); <- remove this 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 
} 

アクティビティコードを探求である私のhomeactivityコードは

package com.example.windows81.travelspoc; 

import android.content.Context; 
import android.content.Intent; 
import android.support.design.widget.NavigationView; 
import android.support.v4.content.ContextCompat; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

import java.util.Timer; 
import java.util.TimerTask; 

public class HomeActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener{ 


ViewPager viewPager; 
LinearLayout sliderDotspanel; 
NavigationView mNavigationView; 
private int dotscount; 
private ImageView[] dots; 
private DrawerLayout mDrawerLayout; 
private ActionBarDrawerToggle mtoggle; 

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

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    mtoggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, 
R.string.close); 
    NavigationView mNavigationView = (NavigationView) 
findViewById(R.id.navigation); 
    mNavigationView.setNavigationItemSelectedListener(this); 

    mDrawerLayout.addDrawerListener(mtoggle); 
    mtoggle.syncState(); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    viewPager = (ViewPager) findViewById(R.id.viewPager); 

    sliderDotspanel = (LinearLayout) findViewById(R.id.SliderDots); 

    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this); 
    viewPager.setAdapter(viewPagerAdapter); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new MyTimerTask(), 2000, 4000); 

    dotscount = viewPagerAdapter.getCount(); 
    dots = new ImageView[dotscount]; 

    for (int i = 0; i < dotscount; i++){ 
     dots[i] = new ImageView(this); 


dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), 
R.drawable.incative_dot)); 

     LinearLayout.LayoutParams params = new 
LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
LinearLayout.LayoutParams.WRAP_CONTENT); 

     params.setMargins(8, 0, 8,0); 

     sliderDotspanel.addView(dots[i], params); 
    } 

dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), 
R.drawable.ic_active)); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int 
positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 

      for (int i = 0; i < dotscount; i++){ 

dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), 
R.drawable.incative_dot)); 
      } 



dots[position].setImageDrawable(ContextCompat.getDrawable 
(getApplicationContext(), R.drawable.ic_active)); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.navigation_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(mtoggle.onOptionsItemSelected(item)){ 
     return true; 
    } 
    switch (item.getItemId()) { 
     case R.id.explore: 
      // do what you want here 
      myMethod(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

public class MyTimerTask extends TimerTask{ 

    @Override 
    public void run() { 

     HomeActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       if (viewPager.getCurrentItem() == 0){ 
        viewPager.setCurrentItem(1); 
       }else if (viewPager.getCurrentItem() == 1){ 
        viewPager.setCurrentItem(2); 
       }else{ 
        viewPager.setCurrentItem(0); 
       } 


      } 
     }); 

    } 
} 

public void myMethod(){ 
    Intent intent = new Intent(this,ExploreActivity.class); 
    startActivity(intent); 
} 
public void exploreActivity(View view){ 
    myMethod(); 
} 

public void packagesActivity(View view){ 
    Intent intent = new Intent(this,PackagesActivity.class); 
    startActivity(intent); 
} 

public void dealsActivity(View view){ 
    Intent intent = new Intent(this,DealsActivity.class); 
    startActivity(intent); 
} 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.explore) { 
     myMethod(); 
    } 
    return false; 
} 
} 
です

ここに私のベース活動コード

package com.example.windows81.travelspoc; 

import android.app.Activity; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 

/** 
* Created by Windows 8.1 on 11/15/2017. 
*/ 

public class BaseActivity extends AppCompatActivity{ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.navigation_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.explore: 
      myMethod(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

public void myMethod(){ 
    Intent intent = new Intent(this,ExploreActivity.class); 
    startActivity(intent); 
} 
public void exploreActivity(View view){ 
    myMethod(); 
} 

public void packagesActivity(View view){ 
    Intent intent = new Intent(this,PackagesActivity.class); 
    startActivity(intent); 
} 

public void dealsActivity(View view){ 
    Intent intent = new Intent(this,DealsActivity.class); 
    startActivity(intent); 
} 
} 
+0

BaseActivityを作成し、その中にonCreateOptionsMenu(メニューメニュー)とonOptionsItemSelected(メニューアイテム項目)を使用する必要があります。あなたの他のすべてのアクティビティはこのベースアクティビティを延長する必要があります –

+0

アクティビティの代わりにフラグメントを使用することができます – Lucky

答えて

0

メニュー項目のコードを記述してベースアクティビティをすべての内部アクティビティに拡張するベースアクティビティを作成します。タイトル

については

共通タイトルのレイアウトを作成します。 activity_main.xml

MainActivityのような他の活動で

abstract class HomeActivity extends Activity { 
    protected TextView txtHeading; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    } 


    protected void setHeading(int resId) { 
    if(tv_title == null) 
    txtHeading = findViewById(R.id.tv_title); 
    if(tv_title != null) 
     txtHeading.setText(resId); 
    } 
} 

その後、あなたのHomeActivityで次に

class MainActivity extends BaseActivity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setHeading(R.string.heading_main); 
    } 
} 

同じあなたが出て、すべての活動を通して同じメニューを持っている場合、私はあなたをアドバイスします

public class ChildActivity extends BaseActivity { 


    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    //getMenuInflater().inflate(R.menu.menu_second, menu); <- remove this 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 
    } 
+0

私は内部アクティビティを使用して私のホームアクティビティを延長しましたが、メニューアイコンを見ることはできますが、 –

+0

@ShyjuKrishnankuttyが私の答えを更新しました。それを確認してください。 –

+0

私は質問を更新しました。 –

1

子アクティビティに続いて同じメニューオプション

public class HomeActivity extends Activity { 

    // other overidden methods 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.item: 
       // do what you want here 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

のために他の活動

のために行きます1つを作成する

BaseActivityその後、AppcompatActivityにそれを拡張し

Activity1ください - >拡張BaseActivity

マジックはここに来る - >あなたはすべての時間のためにsetContentViewを使用する必要はありません。

一つのXMLでBaseActivityを作る - >でframeLayout - >あなたの

とツールバー&でframeLayout で今

Activity1でframeLayoutにをあなたのビューを膨らませるBaseActivity

そして、すべての活動のために同じシステムに従います。

私はすべてアクティビティにsideMenuを表示しなければならなかったので、私はこの解決策に終わった。

関連する問題