0

私はAndroidデバイスでSenchaTouch2アプリを開発しています。私のAndroidデバイスは通常の携帯電話ではないため、ハードウェアキーもあります。sencha touchのキーダウン、キーアップ、またはキープレスイベントに反応できますか?そしてどうやって?そのうちの1つで十分です。

役立つ場合:通常のJavaScriptでは、キーはonkeydown Listenerで処理でき、keyCodeは0です。

[更新] senchatouchのこのチュートリアルに取り組んでいます。私はすべてのステップを実行しました、そしてそれはうまくいきます。ここで、上記で説明したように、ハードウェアキーをキャッチしたいと思います。HandleAndroidHardwareのようにaddEventListenerを配置しました...。

したがって、私のコードは次のようになります。

Ext.application({
    name: "NotesApp",
    models: ["Note"],
    stores: ["Notes"],
    controllers: ["Notes"],
    views: ["NotesList", "NotesListContainer", "NoteEditor"],
    launch: function () {           
        var notesListContainer = {
                xtype: "noteslistcontainer"
        };
        var noteEditor = {
                xtype: "noteeditor"
            };
        Ext.Viewport.add(notesListContainer, noteEditor);

        document.addEventListener("keydown", Ext.bind(onKeyDown, this), false); 

        function onKeyDown(e) {     
           // you are at the home screen
           if (Ext.Viewport.getActiveItem().xtype == notesListContainer.xtype ) {
              alert('aha'); // give out 'aha'
                  //  LABEL1

           } else {}

        }
    }


});

位置LABEL1で関数を呼び出すにはどうすればよいですか。私が呼び出したい関数は、クラスコントローラーにあります。メモとその名前はonNewScanCommandです。

Ext.define("NotesApp.controller.Notes", {

extend: "Ext.app.Controller",
config: {
    refs: {
        // We're going to lookup our views by xtype.
        notesListContainer: "noteslistcontainer",
        noteEditor: {
            selector: 'noteeditor',
            xtype: 'noteeditor',
            autoCreate: true 
       }
    },
    control: {
        notesListContainer: {
            // The commands fired by the notes list container.
            newNoteCommand: "onNewNoteCommand",
            editNoteCommand: "onEditNoteCommand",
            newScanCommand: "onNewScanCommand"
        }
    }
},
onNewScanCommand: function () {
    console.log("onNewScanCommand");

    var now = new Date();
    var noteId = (now.getTime()).toString() + (this.getRandomInt(0, 100)).toString();

    var newNote = Ext.create("NotesApp.model.Note", {
        id: noteId,
        dateCreated: now,
        title: "",
        narrative: ""
    });

    // here I call a function in PhnoeGap, then this call a nativ function
    scan("echome", function(echoValue) {
        newNote.set("title", echoValue.scanNummer);
        newNote.set("narrative", echoValue.scanType);
    });



    var notesStore = Ext.getStore("Notes");
    /*
    if (null == notesStore.findRecord('id', newNote.data.id)) {
        notesStore.add(newNote);
    }*/
    notesStore.add(newNote);

    notesStore.sync();

    notesStore.sort([{ property: 'dateCreated', direction: 'DESC'}]);

    //this.activateNotesList();
},
// Base Class functions.
launch: function () {
    this.callParent(arguments);
    Ext.getStore("Notes").load();
    console.log("launch");
},
init: function () {
    this.callParent(arguments);
    console.log("init");
}

});

4

2 に答える 2

2

アクティビティでこれを試してください

//キーダウン

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
     if (i == KeyEvent.KEYCODE_BACK) {
          //back button key down
     }
return super.onKeyDown(keyCode, event);
}

//キーアップ

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
      if (i == KeyEvent.KEYCODE_BACK) {
          //back button key up
      }
return super.onKeyUp(keyCode, event);
}

あなたはすべての重要なイベントを見ることができます-> ここに

于 2012-11-08T14:57:05.357 に答える
0

私は解決策を持っています!私のコントローラーはイベントを監視しています。イベントはビューNotesListContainerで発生しました。

変数 notesListContainer に ID を追加して、NotesListContainer のオブジェクトを取得し、myevent newScanCommand を起動できるようにします

Ext.application({
        name: "NotesApp",
        models: ["Note"],
        stores: ["Notes"],
        controllers: ["Notes"],
        views: ["NotesList", "NotesListContainer", "NoteEditor"],
        launch: function () {

            var notesListContainer = {
                id: 'nlistcontainer',
                xtype: "noteslistcontainer"
            };
             var noteEditor = {
                xtype: "noteeditor"
            };
            Ext.Viewport.add(notesListContainer, noteEditor);

            document.addEventListener("keydown", Ext.bind(onBackKeyDown, this ), false); 

            function onBackKeyDown(e) {

                // you are at the home screen
                if (Ext.Viewport.getActiveItem().xtype == notesListContainer.xtype ) {

                    //the solution
                    Ext.getCmp('nlistcontainer').fireEvent("newScanCommand", this);

                } else {
                    this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
                        url: 'noteslistcontainer'
                    }));
                }

            }
        }


    });

だから、これは私の救助です: Ext.getCmp('nlistcontainer') ;-) 多分、それはより良い解決策を提供します.

于 2012-11-09T16:44:34.727 に答える