Android应用SQLite addButtonClicked IllegalStateException

时间:2016-03-29 17:43:45

标签: android sqlite

您好我试图在一个片段中创建一个简单的SQLite数据库,其中一个人可以存储备忘录。应用程序上没有明显的错误错误,但一旦用户尝试添加任何内容并单击添加按钮,我收到以下错误。如果有人知道我哪里出错了,那将非常感激

  

03-29 11:45:08.781 6065-6065 / com.test.test.app E / AndroidRuntime:FATAL EXCEPTION:main进程:com.test.test.app,PID:6065

     

java.lang.IllegalStateException:找不到方法   addButtonClicked(View)在父或祖先的Context中   android:在视图类上定义的onClick属性   android.support.v7.widget.AppCompatButton,id为' addButton'

MemoFragment.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" />

1 个答案:

答案 0 :(得分:0)

这是因为该应用预计会在addButtonClicked中找到deleteButtonClickedActivity方法,而不是MemoFragment

将这些方法移动到Activity类或在MemoFragment中设置侦听器并从布局中删除android:onClick="..."