2017-11-14 16 views
0

Ich habe 3 Artikel und 3 Tasten. Für die Schaltflächen habe ich einen Call-to-Action-Funktionen erstellt und diese Absicht funktioniert gut. Ich möchte meine Navigationselemente um die gleiche Aktion ergänzen. Wie kann ich das machen?Gleiche Aktion für Button und Nav-Element

Um sehr klar zu sein. Ich muss die gleiche Aktivität zeigen, wenn ich auf den Button und den Nav-Eintrag klicke. Ich bin neu in Android. Also ich weiß nicht, ob das überhaupt möglich ist oder nicht. Oder ich verwende den richtigen Weg, dies zu tun.

Dies sind die Absichten ich für die Tasten:

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

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

sind meine Menüpunkte sind

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@id/explore" 
     android:icon="@drawable/ic_menu_exp" 
     android:title="@string/Explore" /> 
    <item 
     android:id="@id/menuPack" 
     android:icon="@drawable/ic_menu_pack" 
     android:title="@string/packages" /> 
    <item android:id="@id/dealsMenu" 
     android:icon="@drawable/ic_menu_deals" 
     android:title="@string/deals" /> 
    </menu> 

Dies sind die drei Tasten Ich bin jetzt

<Button 
       android:id="@+id/explore" 
       android:layout_width="100dp" 
       android:layout_height="100dp" 
       android:layout_marginStart="16dp" 
       android:layout_marginLeft="16dp" 
       android:layout_marginTop="40dp" 
       android:background="@null" 
       android:drawableTop="@drawable/explorebutton" 
       android:onClick="exploreActivity" 
       android:text="@string/Explore" 
       android:textAllCaps="false" 
       android:textColor="#838383" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/homelogo" /> 

      <Button 
       android:id="@+id/packages" 
       android:layout_width="100dp" 
       android:layout_height="100dp" 
       android:layout_marginEnd="24dp" 
       android:layout_marginStart="24dp" 
       android:layout_marginTop="40dp" 
       android:background="@null" 
       android:drawableTop="@drawable/packagebutton" 
       android:onClick="packagesActivity" 
       android:text="@string/packages" 
       android:textAllCaps="false" 
       android:textColor="#838383" 
       app:layout_constraintEnd_toStartOf="@+id/deals" 
       app:layout_constraintStart_toEndOf="@+id/explore" 
       app:layout_constraintTop_toBottomOf="@+id/homelogo" /> 

      <Button 
       android:id="@+id/deals" 
       android:layout_width="100dp" 
       android:layout_height="100dp" 
       android:layout_marginEnd="16dp" 
       android:layout_marginRight="16dp" 
       android:layout_marginTop="40dp" 
       android:background="@null" 
       android:drawableTop="@drawable/dealsbutton" 
       android:onClick="dealsActivity" 
       android:text="@string/deals" 
       android:textAllCaps="false" 
       android:textColor="#838383" 
       app:layout_constraintEnd_toEndOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/homelogo" /> 
mit

Ich habe die Änderungen an meiner HomeActivity.Java

vorgenommen
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.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); 
     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 onOptionsItemSelected(MenuItem item) { 
     if(mtoggle.onOptionsItemSelected(item)){ 
      return true; 
     } 

     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) { 
      Log.d("Explore","Clicked"); 
      myMethod(); 
     } 
     return false; 
    } 
    } 

Aber ich bekam die folgende Fehler

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.windows81.travelspoc, PID: 3485 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.windows81.travelspoc/com.example.windows81.travelspoc.HomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.NavigationView.setNavigationItemSelectedListener(android.support.design.widget.NavigationView$OnNavigationItemSelectedListener)' on a null object reference 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2625) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2691) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:188) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1526) 
         at android.os.Handler.dispatchMessage(Handler.java:111) 
         at android.os.Looper.loop(Looper.java:207) 
         at android.app.ActivityThread.main(ActivityThread.java:5790) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) 
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.NavigationView.setNavigationItemSelectedListener(android.support.design.widget.NavigationView$OnNavigationItemSelectedListener)' on a null object reference 
         at com.example.windows81.travelspoc.HomeActivity.onCreate(HomeActivity.java:40) 
         at android.app.Activity.performCreate(Activity.java:6275) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2578) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2691)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:188)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1526)  
         at android.os.Handler.dispatchMessage(Handler.java:111)  
         at android.os.Looper.loop(Looper.java:207)  
         at android.app.ActivityThread.main(ActivityThread.java:5790)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)  
+0

Bitte lesen Sie [Unter welchen bestimmten Umständen füge ich hinzu. "Dringende" oder andere ähnliche Sätze zu meiner Frage, um schnellere Antworten zu erhalten?] (// meta.stackoverflow.com/q/326569) - Die Zusammenfassung ist, dass dies keine ideale Möglichkeit ist, Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

Antwort

0

Versuchen Sie, diese

Methode erstellen wie diese

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

als Ihre Methode in Button like this

public void exploreActivity(View view){ 
     myMethod() 
    } 
nennen

jetzt Implementieren NavigationView.OnNavigationItemSelectedListener der Hörer in Ihrer Aktivität:

public class YourActivity extends AppCompatActivity implements 
       NavigationView.OnNavigationItemSelectedListene 

als

gesetzt
 NavigationView mNavigationView = (NavigationView) findViewById(R.id.account_navigation_view); 
    `mNavigationView.setNavigationItemSelectedListener(this);` 

Aufschalten der Methode

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.explore) { 
      Log.d("Explore","Clicked"); 
      myMethod() 
     } 
} 
+0

Dies sind die Dinge, die ich getan habe öffentliche Klasse HomeActivity erweitert AppCompatActivity implementiert NavigationView.OnNavigationItemSelectedListener { NavigationView mNavigationView; und on create mNavigationView.setNavigationItemSelectedListener (this); public void myMethod() { Absicht intent = new Intent (this, ExploreActivity.class); startActivity (Absicht); } public void exploreActivity (Ansicht anzeigen) { myMethod(); } –

+0

@ShyjuKrishnankutty hat Sie nicht erhalten – Prem

+0

öffentliche boolean onNavigationItemSelected (MenuItem Element) { // Navigation Navigationsansicht Element klickt hier. int id = item.getItemId(); if (id == R.id.explore) { Log.d ("Explore", "Clicked"); myMethod(); } Rückgabe false; } –

0

Für Menü-Navigation -> es NavigationView mit erstellen

Hier ist ein Beispiel Link dafür ->http://v4all123.blogspot.in/2016/02/navigationview-example-in-android.html

Mit dieser Methode können Sie Nav-Menü von Menüoption erstellen.

Eine andere Methode ist Recyclerview mit -> Recyclerview machen und alle Ihre Absicht durch Adapter Griff (Wenn Sie dynamische Liste oder lange Liste haben, dann würde ich 2. Methode vorschlagen.)

Verwandte Themen