Нативная работа с интерфейсом Android

Рейтинг: 1Ответов: 1Опубликовано: 26.04.2015

Подскажите, можно ли вынести следующий код в jni? Все эти функции работы с интерфейсом и реакцию на события.

    void OnLoginLayout(){
    setContentView(R.layout.login);

    Button auth = (Button) findViewById(R.id.LoginLayout_Auth);
    auth.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        EditText login = (EditText) findViewById(R.id.LoginLayout_Login);
        EditText pass = (EditText) findViewById(R.id.LoginLayout_Password);

        if(Login(login.getText().toString(), pass.getText().toString())!=0)
            OnMainLayout();
        else{
            String err=GetLoginError();
            TextView error = (TextView) findViewById(R.id.LoginLayout_Error);
            error.setText(err);
        }

        //UnLoginPage();            
     }
     });

    auth = (Button) findViewById(R.id.LoginLayout_Reg);
    auth.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        OnRegisterLayout();
    }
    });

    return;
}

Ответы

▲ 2

Теоретически можно. Практически не имеет смысла, если речь идет именно об этом коде. Если же в onClick делается что-то более нетривиальное, требующее участия нативного кода, то надо создать native method и вызывать его из onClick.

Иными словами, можно из Java вызывать нативный код, можно из нативного кода вызывать Java методы - но все это делается не бесшовно (даже при использовании облегчающих жизнь кодогенераторов типа swig). Поэтому хоть это и возможно, но обычно требует четкого понимания, зачем это нужно, и готовности помучиться ради этого.

В данном конкретном примере я не вижу, зачем нужно применять нативный код, если все и так прекрасно делается на Java. Впрочем, я могу и ошибаться; в таком случае более детальное описание задачи поможет дать более дельный совет.