Soru & Cevap

ActionBar ...

12.01.2017 - 12:36

Arkadaşlar saatlersir hatayı bulmaya çalıştım nette arattım ama hiç bir çözüm çare olmadı.


ActionBar   eklemek istiyorum kodları https://www.mobilhanem.com/android-action-bar-kullanimi/
 adresinden aldım indirsim tek başına çalıştı ama kendi uygulamama eklediğimde hata verdi.

Tekrar tekrar kontrol ettim ama çözemedim.

MainActivity de 55. satırı yani actionBar.setDisplayShowTitleEnabled(false);  komut dizisini gösteriyor

HATA AŞAĞIDA

01-11 21:11:40.149 1154-1154/net.netmatematik.matematik W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6273288)
01-11 21:11:40.153 1154-1154/net.netmatematik.matematik E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.netmatematik.matematik/net.netmatematik.matematik.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
 at android.app.ActivityThread.access$600(ActivityThread.java:130)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
                                                                           Caused by: java.lang.NullPointerException
at net.netmatematik.matematik.MainActivity.onCreate(MainActivity.java:56)
at android.app.Activity.performCreate(Activity.java:5008)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
at android.app.ActivityThread.access$600(ActivityThread.java:130) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4745) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method)

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.netmatematik.matematik">

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:logo="@drawable/logomuz"
        android:theme="@style/AppTheme">

        <activity android:name=".GirisEkrani">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/logomuz"></activity>
        <activity android:name=".Matematik" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
        <activity android:name=".MatematikGoster" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
        <activity android:name=".Mufredat" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
        <activity android:name=".Geometri" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>

        <activity
            android:name=".Ayarlar"
            android:parentActivityName=".MainActivity" ><!-- Bunu ekleyerek Action Bar ile geri gelmek istediğimiz sayfayı seçiyoruz  -->
            >
        </activity>

    </application>

</manifest>

 

 

 

Ayarlar.java

package net.netmatematik.matematik;

import android.app.Activity;
import android.os.Bundle;

public class Ayarlar extends Activity {
	
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.ayarlar);
	         
	    }
}

 

 

MainActivity.class

package net.netmatematik.matematik;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.google.android.gms.ads.*;

import java.lang.reflect.Field;


public class MainActivity extends AppCompatActivity {

    //ACTİONBAR
    private ActionBar actionBar;
    private Menu optionsMenu;
    //ACTİONBAR


    //TAM EKRAN REKLAM
    private InterstitialAd interstitial;
    private static final String REKLAM_ID = "ca-app-pub-1187547260308799/5096169861";
    //TAM EKRAN REKLAM

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


       // getActionBar().setDisplayHomeAsUpEnabled(true);
        //ACTİONBAR
        actionBar = getActionBar();



        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayUseLogoEnabled(true);

        getOverflowMenu(); 


        //Google Analitik için
        Tracker t = ((MyApp) getApplication()).getTracker(MyApp.TrackerName.APP_TRACKER);
        t.setScreenName("Ana Sayfa"); 
        t.send(new HitBuilders.ScreenViewBuilder().build());



        ListView listview1;
        listview1 = (ListView) findViewById(R.id.listView1);
        OzelListViewBilgi bankaDizi[] = new OzelListViewBilgi[]{
                new OzelListViewBilgi(1, "Matematik", "YGS Konuları", R.drawable.math120),
                new OzelListViewBilgi(2, "2016-2017", "Matematik Müfredatı", R.drawable.geometri120),
        };

        final OzelListViewAdaptor adaptir = (new OzelListViewAdaptor(this, R.layout.activity_mainlistele, bankaDizi));
        listview1.setAdapter(adaptir);

        listview1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                switch (position) {
                    case 0:
                        startActivity(new Intent(getApplicationContext(), Matematik.class));
                        break;
                    case 1:
                        startActivity(new Intent(getApplicationContext(), Geometri.class));
                        break;
                }
            }
        });
    }






    //ACTİONBAR
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//Menüyü oluşturuyoruz
        this.optionsMenu = menu;
        MenuInflater inflater = getMenuInflater();// inflater herhangi bir view ın java objesine dönüştürülüp düzenlenmesinde yardımcı olur.Burda menü düzenlenmesi için kullanacağız
        inflater.inflate(R.menu.anasayfa_menu, menu);//Xml olarak oluşturduğumuz menü yü alıyoruz
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings: //settings iconu tıklandığında
                settings();
                break;
            case R.id.action_share: //share iconu
                share();
                break;
            case R.id.action_location_found: 
                location();
                break;
            case R.id.action_refresh://refresh iconu
                refresh();
                return true;
            case R.id.action_help://help iconu
                help();
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        return true;
    }
    public void share(){
        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/plain");
        String shareMesaj = "mobilhanem.com tarafından gönderildi";
        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Mesaj Konu");
        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMesaj);
        startActivity(Intent.createChooser(sharingIntent, "Paylaşmak İçin Seçiniz"));
    }
    public void settings(){
        Intent myIntent = new Intent(getApplicationContext(), Ayarlar.class);
        startActivity(myIntent);
    }
    public void location(){//Google map açıcak q=Ankara ile konumumuzdan ankaraya nasıl gideceğimizi göstericek
        Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q=Ankara"));
        startActivity(intent);
    }
    public void help(){
        AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
        alertDialog.setTitle("Mesaj");
        alertDialog.setMessage("Yardıma mı ihtiyaç var?");
        alertDialog.setCancelable(false);
        alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        alertDialog.show();
    }
    public void refresh(){
        setRefreshActionButtonState(true);//progress bar refresh iconla değişecek ve çalışacak .
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRefreshActionButtonState(false);//3 sn sonra duracak ve refresh iconu geri gelecek. Siz bu arada başka işlemler sunucu bağlantısı vs.. yapabilirsiniz
            }
        }, 3000);
    }
    public void setRefreshActionButtonState(final boolean refreshing) {

        //bu method refresh iteme tıklandığında progress bar gözükmesi için
        if (optionsMenu != null) {
            final MenuItem refreshItem = optionsMenu
                    .findItem(R.id.action_refresh);
            if (refreshItem != null) {
                if (refreshing) {
                    refreshItem.setActionView(R.layout.actionbar_refresh_progress);
                } else {
                    refreshItem.setActionView(null);
                }
            }
        }
    }
    private void getOverflowMenu() {
        //Arkadaşlar bu method overflow menu için
        //Bazı cihazlarda action bar a sığmayan actionlar açılır menu de deilde cihazın menu buttonuna basınca klasik android options menu gibi açılıyor
        //Bu methodu onCreate içinde çağırarak actionBar a sığmayan action ları overFlow menude gösteriyoruz.
        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
//ACTİONBAR

}

 

Menu dosyası

anasayfa_menu.xml

<?xml version="1.0" encoding="utf-8"?>


<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <item android:id="@+id/action_share"
          android:icon="@drawable/ic_action_share"
          android:title="Paylaş" 
          app:showAsAction="always" />
    
    <item android:id="@+id/action_settings"
          android:icon="@drawable/ic_action_settings"
          android:title="Paylaş" 
          app:showAsAction="always" />
    
   
    <!-- Refresh -->
    <item android:id="@+id/action_refresh"
          android:icon="@drawable/ic_action_refresh"
          android:title="Yenile"
        app:showAsAction="always" />
    
    
     <!-- Location Found -->
    <item android:id="@+id/action_location_found"
          android:icon="@drawable/ic_action_location_found"
          android:title="Yer"
        app:showAsAction="always" />
    
    <!-- Help -->
    <item android:id="@+id/action_help"
          android:icon="@drawable/ic_action_help"
          android:title="Yardım"
        app:showAsAction="ifRoom"/>
</menu>

 

style.xml

<resources>

    <style name="AppTheme"
        parent="Theme.AppCompat.Light.DarkActionBar">
    </style>

    <style name="AppBaseTheme" parent="android:Theme.Light">
     </style>

</resources>

 

 

 

6 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user huSSooxXx
huSSooxXx
12.01.2017 - 05:17

ActionBar biraz eskidi Toolbar kullan istersen. Kolay gelsin