2016-03-29 2 views
0

こんにちは私は個人がメモを保存できる断片で単純なSQLiteデータベースを作成しようとしています。アプリにエラーが明白なエラーはありませんが、ユーザーが何かを追加しようとして追加ボタンをクリックすると、次のエラーが表示されます。 45::私は間違っているつもりだところ、誰もが知っている場合、それは非常にAndroid app SQLite addButtonClicked IllegalStateException

3月29日11をいただければ幸い08.781 6065から6065/com.test.test.app E/AndroidRuntime:致命的な例外:メインプロセス:COM。 test.test.app、PID:6065

java.lang.IllegalStateException: アンドロイドの親や祖先コンテキスト方法 addButtonClicked(ビュー)を見つけることができませんでした:onClickのは、ビュークラスに定義された属性 android.support.v7 .widget.AppCompatButton id 'addButton'

メモ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

フラグメントの場合、xml経由で追加されるボタンクリックメソッドは機能しません。代わりにJavaファイルのonClickコードを追加してください –

答えて

0

アプリがないMemoFragmentで、あなたのActivityaddButtonClickeddeleteButtonClicked方法を見つけることを期待するためです。

これらのメソッドをActivityクラスに移動するか、MemoFragment内でリスナーを設定し、レイアウトからandroid:onClick="..."を削除します。

+0

私は、決して使用されなかったためにボタンが見つからないという考えがありました。万が一、 'MemoFragment'で期待通りに変えることができるか分かりますか? – DinoArmadillo

+0

私はそれが可能であることを非常に疑っています。 –

+0

ありがとうございます。同様に 'Input'を実装する必要がありますか?どのようにXMLの代わりにJavaにボタンを実装するかの例を知っていますか? – DinoArmadillo

関連する問題