2016-04-07 11 views
2

Ich habe zwei Arten von Code ausprobiert, um dies zum Funktionieren zu bringen, und es hält mich Kraft, schließt, wenn ich die Taste drücke, um in eine andere Aktivität zu gehen. Ich benutze ein Fragment und es gibt einen Knopf in diesem Fragments-Code, aber ich kann es scheinbar nicht zum Laufen bringen.Onclick-Taste Ereignis in Fragment

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.androidbelieve.activity.LoginActivity; 
import com.androidbelieve.helper.SQLiteHandler; 
import com.androidbelieve.helper.SessionManager; 

import java.util.HashMap; 

public class PrimaryFragment extends Fragment { 

private TextView txtName; 
private Button btnLogout; 

private SQLiteHandler db; 
private SessionManager session; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    RelativeLayout rootView = (RelativeLayout) inflater.inflate(R.layout.primary_layout, container, false); 

    txtName = (TextView) rootView.findViewById(R.id.username); 
    btnLogout = (Button) rootView.findViewById(R.id.logout); 

    // SqLite database handler 
    db = new SQLiteHandler(getActivity().getApplicationContext()); 

    // session manager 
    session = new SessionManager(getActivity().getApplicationContext()); 

    if (!session.isLoggedIn()) { 
     logoutUser(); 
    } 
    // Fetching user details from SQLite 
    HashMap<String, String> user = db.getUserDetails(); 

    String name = user.get("name"); 

    // Displaying the user details on the screen 
    txtName.setText(name); 


    // Logout button click event 
    btnLogout.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      logoutUser(); 
     } 


    }); 

    Button button = (Button) rootView.findViewById(R.id.saleentry); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      updateDetail(); 
     } 
    }); 
    return rootView; 
} 

public void updateDetail() { 
    Intent intent = new Intent(getActivity(), SentFragment.class); 
    startActivity(intent); 
} 

Ich habe versucht, auf eine andere Seite mit der Taste zu gehen, aber es nicht immer. Hier
ist mein stacktrace..this das Ergebnis ist, wenn ich verwendet OnClickListener

04-07 22: 42: 37,285 27.777-27.777/com.androidbelieve.drawerwithswipetabs> E/Android Runtime: FATAL AUSNAHME: Haupt Prozess: com.androidbelieve.drawerwithswipetabs, PID: 27777 Thema: themes: {default = überlagerung: system, iconPack: system, fontPkg: system,> com.android.systemui = überlagerung: system} android.content.ActivityNotFoundException: Die explizite Aktivitätsklasse konnte nicht gefunden werden. {Com.androidbelieve.drawerwithswipetabs/com.androidbelieve.drawerwithswipet> abs.SentFragment}; Hast du diese Aktivität in deiner> AndroidManifest.xml deklariert? bei android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1801) bei android.app.Instrumentation.execStartActivity (Instrumentation.java:1514) bei android.app.Activity.startActivityForResult (Activity.java:3930) bei android.app.Activity.startActivityForResult (Activity.java:3890) bei android.support.v4.app.FragmentActivity.startActivityFromFragment (FragmentActivity.java:849) bei android.support.v4.app.FragmentActivity $ HostCallbacks.onStartActivityFromFragment (FragmentActivity.java:907) bei android.support.v4.app.Fragment.startActivity (Fragment.java:916) bei com.android believe.drawerwithswipetabs.PrimaryFragment.updateDetail (PrimaryFragment.java:75) bei com.androidbelieve.drawerwithswipetabs.PrimaryFragment $ 2.onClick (PrimaryFragment.java:67) bei android.view.View.performClick (View.java:5204) bei android.view.View $ PerformClick.run (View.java:21156) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5456) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

+0

Ist SendFragment.class eine Aktivität oder ein Fragment? Sie können 'startActivity' nicht für ein Fragment verwenden. –

+0

fragment @ AlexTownsend – Kumar

+0

Wie gesagt, Sie können kein Fragment mit 'startActivity' starten, nur Aktivitäten.Einige Optionen sind A) Erstellen Sie eine neue Aktivität, die Ihre 'SendFragment' enthält und starten Sie diese mit' startActivity' oder B) Ersetzen Sie Ihre 'PrimaryFragment' mit' SendFragment' in Ihrer aktuellen Aktivität –

Antwort

0

Sie zunächst muss ein Rahmenlayout in Ihrem XML-Layout hinzufügen.

<FrameLayout 
    android:id="@+id/frame_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

dann diesen Code auf Klick verwenden

Button button = (Button) rootView.findViewById(R.id.saleentry); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {   
      Fragment fragment = new SentFragment(); 
      FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.content_frame, fragment); 
      fragmentTransaction.remove(new PrimaryFragment()); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
      } 
     });