2

リストビューにイメージボタンを持つ ListFragment があります。imageButton XML には android:onclick があり、Main.java に適切にフォーマットされたメソッドがありますが、メソッドが見つからないというエラーが表示されます。何か案は?

XML:

<ImageButton
    android:id="@+id/delete_img"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    android:onClick="myFunction"
    android:paddingRight="10dip"
    android:paddingTop="3dip"
    android:src="@drawable/delete_icon" />

私の活動:

public class Main extends Activity {
    public static Context appContext;
    private CommentsDataSource datasource;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        datasource = new CommentsDataSource(this);
        datasource.open();

        // returnNotes();

        List<Comment> values = datasource.getAllComments(); // unnecessary?
        ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
            android.R.layout.simple_list_item_1, values);
        // setListAdapter(adapter); this must be imported to listFragment
        // notesfragment

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        appContext = getApplicationContext();

        // ActionBar
        ActionBar actionbar = getActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab NotesTab = actionbar.newTab().setText("Notes");
        ActionBar.Tab FoldersTab = actionbar.newTab().setText("Folders");
        ActionBar.Tab OptionsTab = actionbar.newTab().setText("Options");

        Fragment NotesTest = new NotesFragment();
        Fragment FoldersFragment = new FoldersFragment();
        Fragment OptionsFragment = new OptionsFragment();

        NotesTab.setTabListener(new MyTabsListener(NotesTest));
        FoldersTab.setTabListener(new MyTabsListener(FoldersFragment));
        OptionsTab.setTabListener(new MyTabsListener(OptionsFragment));

        actionbar.addTab(NotesTab);
        actionbar.addTab(FoldersTab);
        actionbar.addTab(OptionsTab);

    }

    public List<Comment> returnNotes() {
        datasource = new CommentsDataSource(this);
        datasource.open();
        List<Comment> theNotes = datasource.getAllComments();
        return theNotes;
    }

    // Constructs the options menu with tabs
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    protected void onDestroy() {
        datasource.close();
        super.onDestroy();
    }

    // Tab event listener
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.new_note:
            Intent intentnote = new Intent(this, NewNote.class);
            startActivity(intentnote);
            return true;
        case R.id.new_folder:
            Intent intentfolder = new Intent(this, NewFolder.class);
            startActivity(intentfolder);
            return true;
        }
        return false;
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
    }
}

私のタブリスナー:

class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // do something on tab reselected?
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.replace(R.id.fragment_container, fragment);
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(fragment);
    }

    public void myFunction(View v) {
        Log.d("uniNote", "hello world");
    }
}

Logcat の出力:

04-09 17:36:28.080: E/AndroidRuntime(536): 致命的な例外: メイン
04-09 17:36:28.080: E/AndroidRuntime(536): java.lang.IllegalStateException: メソッド myFunction が見つかりませんでした (View ) id 'delete_img' を持つビュー クラス android.widget.ImageButton の onClick ハンドラのアクティビティ クラス com.finalProject.uniNote.Main 内

4

1 に答える 1

4

ボタンがあなたの中にあると仮定すると、そのレイアウトをインスタンス化するクラス内R.layout.mainのメソッドが必要です。このインスタンスではあなたのクラス:onClickMain

public class Main extends Activity {
    public static Context appContext;
    private CommentsDataSource datasource;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        datasource = new CommentsDataSource(this);
        datasource.open();
        List<Comment> values = datasource.getAllComments(); // unnecessary?
        ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
                android.R.layout.simple_list_item_1, values);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // etc 
    }

    // Inside Main class - outside of onCreate
    public void myFunction(View v) {
        Log.d("uniNote", "hello world");
    }

}
于 2013-04-09T17:49:43.653 に答える