2016-03-29 21 views
0

Hallo ich versuche, eine einfache SQLite-Datenbank in einem Fragment zu erstellen, in dem eine Person Memos speichern kann. Es gibt keinen Fehler offensichtliche Fehler in der App, aber sobald ein Benutzer versucht, etwas hinzuzufügen und auf die Schaltfläche Hinzufügen klickt, erhalte ich den folgenden Fehler. Wenn jemand weiß, wo ich falsch werde wäre es vielAndroid App SQLite addButtonClicked IllegalStateException

03-29 11 geschätzt werden: 45: 08.781 6065-6065/com.test.test.app E/Android Runtime: FATAL AUSNAHME: Hauptprozess: com. test.test.app, PID: 6065

java.lang.IllegalStateException: Könnte finden Methode nicht addButtonClicked (view) in einem Elternteil oder einem Vorfahren Kontext für android: onClick auf Ansichtsklasse definiert Attribut android.support.v7 .widget.AppCompatButton mit der ID 'addButton'

Memo Fragment.java

package com.teat.test.app; 
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.EditText; 
import android.widget.TextView; 


/** 
    * A simple {@link Fragment} subclass. 
    */ 
public class MemoFragment extends Fragment { 

EditText Input; 
TextView LyricText; 
MyDBHandler dbHandler; 
Button addButtonClicked; 
Button deleteButtonClicked; 

public MemoFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_memo, container, false); 

    Input = (EditText) v.findViewById(R.id.Input); 
    LyricText = (TextView) v.findViewById (R.id.LyricText); 
    dbHandler = new MyDBHandler(getActivity() ,null, null, 1); 
    printDatabase(); 
    return v; 
} 
//add lyric to database 
    public void addButtonClicked(View view){ 
    Lyrics lyrics = new Lyrics(Input.getText().toString()); 
     dbHandler.addLyric(lyrics); 
    printDatabase(); 
} 

//delete items 
public void deleteButtonClicked(View view){ 
    String inputtext = Input.getText().toString(); 
    dbHandler.deleteLyrics(inputtext); 
    printDatabase(); 


} 

public void printDatabase(){ 
    String dbString = dbHandler.databaseToString(); 
    LyricText.setText(dbString); 
    Input.setText(""); 
} 

} 

fragment_memo.xml

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/Input" 
    android:layout_marginTop="71dp" 
    android:width="300dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Add" 
    android:id="@+id/addButton" 
    android:layout_below="@+id/Input" 
    android:layout_alignLeft="@+id/Input" 
    android:layout_alignStart="@+id/Input" 
    android:layout_marginTop="44dp" 
    android:onClick="addButtonClicked" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Delete" 
    android:id="@+id/deleteButton" 
    android:layout_alignBottom="@+id/addButton" 
    android:layout_alignRight="@+id/Input" 
    android:layout_alignEnd="@+id/Input" 
    android:longClickable="false" 
    android:onClick="deleteButtonClicked" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/LyricText" 
    android:layout_below="@+id/deleteButton" 
    android:layout_toRightOf="@+id/addButton" 
    android:layout_toEndOf="@+id/addButton" 
    android:layout_marginTop="102dp" /> 

+0

Schaltfläche Klick-Methode über XML hinzugefügt funktioniert nicht im Falle von Fragmenten. Add onClick-Code in Ihrer Java-Datei stattdessen –

Antwort

0

Dies liegt daran, die App addButtonClicked und deleteButtonClicked Methoden in Ihrem Activity zu finden erwartet, nicht in den MemoFragment.

Verschieben Sie diese Methoden entweder in die Activity-Klasse oder setzen Sie die Listener in das MemoFragment und entfernen Sie android:onClick="..." aus Ihrem Layout.

+0

Ich hatte eine Idee, dass es die Schaltflächen aufgrund ihrer Darstellung nicht als nie verwendet finden konnte. Du könntest wissen, wie ich es in "MemoFragment" ändern könnte. – DinoArmadillo

+0

Ich bezweifle sehr, dass es möglich ist. –

+0

Danke. müsste ich auch 'Input' implementieren. und kennen Sie einige Beispiele dafür, wie ich die Schaltfläche in Java anstelle von XML implementieren kann – DinoArmadillo

Verwandte Themen