5

Ich möchte die Home-Schaltfläche in meinem Fragment aktivieren. Diese Frage wird früher, aber für eine Aktivität gestellt.
Ich habe versucht ...Schaltfläche "Home" aktivieren ActionbarSherlock, Sherlockfragment

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

... aber das funktioniert nicht.
Hier ist mein Code:

import com.actionbarsherlock.R; 
import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.view.MenuItem; 

import android.support.v4.app.Fragment; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 

public class SafanTab extends SherlockFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.safantab, container, false); 
    } 

    public OnClickListener onOverClick = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Over_Safan.class); 
      startActivityForResult(myIntent, 0); 
     } 
    }; 

    public OnClickListener onProductenClick = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Over_Safan.class); 
      startActivityForResult(myIntent, 0); 
     } 
    }; 

    public OnClickListener onTwitterClick = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Over_Safan.class); 
      startActivityForResult(myIntent, 0); 
     } 
    }; 

} 

Wie kann man eine Home-Taste auf SherlockFragment aktivieren?

Antwort

13

Haben Sie versucht, den folgenden Code die Hauptaktivität hinzuzufügen - die, die extends SherlockActivity oder extends SherlockFragmentActivity?

ActionBar actionBar = getSupportActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 

Ich glaube nicht, Sie können getSupportActionBar in etwas, das nur extends SherlockFragment.

+0

ja! es funktioniert Du hast gerade meinen Tag gerettet: P! – user1534326

+4

Aber 'SherlockFragment' erlaubt Ihnen,' getSherlockActivity(). GetSupportActionBar() 'aufzurufen. –

25

Sie müssen auch die Optionen Menüauswahl außer Kraft zu setzen:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Denken Sie daran, der obige Code würde in einer Aktivität führen (daher finish()). Wenn Sie kein Activity verwenden (was für mich seltsam wäre ...), dann müssen Sie das ersetzen.

+0

aber es gibt eine Erot bei "getSupportActionbar (0)" – user1534326

+1

... dann sagen Sie das in Ihrem ursprünglichen Beitrag. Versuchen Sie es in 'getSherlockActivity(). GetSupportActionBar()' zu ändern. – Eric

+0

Danke für die Antwort aber Mattdonders hat die richtige Antwort gegeben. – user1534326

0

Die einfachste Lösung ist es, diese drei einfachen Schritten folgen:

1 - in der AndroidManifest erklären, die die Eltern Ihrer Tätigkeit ist:

<activity android:theme="@style/Theme.MyApp" 
      android:name="com.example.CurrentActivity" 
      android:parentActivityName="com.example.MainActivity" > 
     <!-- Parent activity meta-data to support 4.0 and lower --> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.example.ParentActivity" /> 

2 - Fügen Sie das Up-Symbol in der Aktionsleiste , einfach von Ihrem onCreate Methode aufrufen:

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

3 - die Aktivität angeben zu öffnen, wenn der Benutzer die Aufwärts-Taste drückt:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == android.R.id.home) { 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

HINWEIS: Wenn Sie anrufen (wie von @Eric vorgeschlagen):

finish(); 

statt:

NavUtils.navigateUpFromSameTask(this); 

Ihr nicht wirklich "up Navigation" durchgeführt wird, da wie die documentation sagt:

Die Aufwärtsnavigation unterscheidet sich von der Rückwärtsnavigation, die durch die System-Zurück-Taste bereitgestellt wird. Mit der Schaltfläche Zurück können Sie in umgekehrter chronologischer Reihenfolge durch die Historie der Bildschirme navigieren, mit denen der Benutzer zuletzt gearbeitet hat. Es basiert im Allgemeinen auf den zeitlichen Beziehungen zwischen den Bildschirmen und nicht auf der hierarchischen Struktur der App (die die Grundlage für die Navigation nach oben ist).