2017-06-05 3 views
0

Ich versuche eine App mit Tabs für den Laden, den ich arbeite, zu erstellen. Es ist das Geld zu zählen und zu sehen, ob es richtig ist.Wie man einen Taschenrechner mit extends erzeugt Fragment

In der ersten Registerkarte ist die Anwendung, und in der zweiten, möchte ich einen Rechner (wie der Android). Dann verwende ich eine Tabbed-Aktivität, so dass meine Java-Klassen extends Fragment haben.

Ich versuche, einige YouTube-Videos zu sehen, aber jeder verwendet extends AppCompatActivity, also habe ich den gleichen Code gemacht, aber ich denke, dieser funktioniert nicht wie Fragmente. Meine App funktioniert nicht, wenn ich versuche, sie auszuführen.

Was kann ich tun, damit dies funktioniert? Was kann ich ändern?

Ich habe bereits die Methoden in "onClick" auf Layouts Button.

package com.example.ayrton.fecharcaixa; 
import android.app.Dialog; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class TabCalc extends Fragment{ 

    TextView screen; 
    String display = ""; 
    String currentOperator = ""; 

    public TabCalc(){ 

    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.tab_calculadora, container, false); 
     screen = (TextView) view.findViewById(R.id.txtScreen); 
     screen.setText(""); 
     return view; 
    } 
    public void updateScreen(){ 
     screen.setText(display); 
    } 

    public void onClickNumber (View v){ 
     Button b = (Button) v; 
     display += b.getText(); 
     updateScreen(); 
    } 

    public void onClickOperator(View v){ 
     Button b = (Button)v; 
     display += b.getText(); 
     currentOperator = b.getText().toString(); 
     updateScreen(); 
    } 

    public void clear(){ 
     display = ""; 
     currentOperator = ""; 
     updateScreen(); 
    } 

    public void onClickPonto(View v){ 
     Button b = (Button)v; 
     display += b.getText(); 
     updateScreen(); 
    } 

    public void onClickClear(View v){ 
     clear(); 
     updateScreen(); 
    } 

    public void onClickEqual(View v){ 
    } 
} 

Der Fehler ist:

FATAL EXCEPTION: main 
    Process: com.example.ayrton.fecharcaixa, PID: 12074 
    java.lang.IllegalStateException: Could not find method onClickNumber(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'bt7' 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
     at android.view.View.performClick(View.java:5612) 
     at android.view.View$PerformClick.run(View.java:22285) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6123) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 
+0

Sie sollten den Klick Zuhörer in der Java-Code festgelegt –

Antwort

1

Sie haben Ihre onClickNumber (Ansicht) in der Tabbed Aktivität zu definieren, wo das Fragment enthalten ist.

Die andere Lösung ist es, die OnClickListener der Schaltfläche in dem Fragment Klassencode zu definieren:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.tab_calculadora, container, false); 
     screen = (TextView) view.findViewById(R.id.txtScreen); 
     screen.setText(""); 

     Button yourButton = (Button)view.findViewById(R.id.yourButtonId); 
     yourButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        onClickNumber(v); 
      } 
     }); 
     return view; 
} 
Verwandte Themen