在不同的文件类java Android

时间:2015-07-08 17:11:08

标签: java android xml onclicklistener

我正在学习使用外部课程。这个项目只是一个例子。我有一个扩展Activity的类,在这个类中我想访问我的Login按钮。 Login按钮将运行在OnClickListenerLogin()中实现OnClickListener的外部类。

在OnClickListenerLogin中我想在Login.xml中获取EditText值。但每当我调用它时,该值返回“”。

我的代码中缺少什么,我的OnClickListenerLogin的代码是什么,所以我可以在Login.xml中获取EditText值?

Login.xml

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    tools:context="com.example.phonekiosk.LoginActivity" >

    <RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff">

        <!-- Login Form -->
        <LinearLayout 
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dip">
            <!-- Email Label -->
            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="#372c24"
                android:text="Username"/>
            <EditText 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dip"
                android:layout_marginBottom="20dip"
                android:singleLine="true"
                android:id="@+id/txtUsername"/>
            <!-- Password Label -->
            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="#372c24"
                android:text="Password"/>
            <EditText 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dip"
                android:singleLine="true"
                android:password="true"
                android:id="@+id/txtPassword"/>
            <!-- Login Button -->
            <Button
                android:id="@+id/btnLogin"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dip"
                android:text="Login" />
        </LinearLayout>
        <!-- Login Form Ends -->
    </RelativeLayout>
</ScrollView>

PhoneKiosk.java

package com.example.phonekiosk;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {
    Button btnLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        btnLogin = (Button) findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(new OnClickListenerLogin());
    }
}

OnClickListenerLogin.java

package com.example.phonekiosk;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.EditText;
import android.widget.Toast;

public class OnClickListenerLogin implements OnClickListener {

    @Override
    public void onClick(View view) {
        final Context context = view.getContext();

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View formLogin = inflater.inflate(R.layout.login, null);

        final EditText txtUsername = (EditText) formLogin.findViewById(R.id.txtUsername);
        final EditText txtPassword = (EditText) formLogin.findViewById(R.id.txtPassword);

        String username = txtUsername.getText().toString();
        String password = txtPassword.getText().toString();

        Log.d("test", username + "-" + password);
    }
}

4 个答案:

答案 0 :(得分:1)

您没有使用与LoginActivity创建的视图相同的视图。 onClick中视图膨胀的代码。

您可以将引用传递给用户名&amp;的EditText。通过为它实现构造函数的OnClickListenerLogin的密码。

public class OnClickListenerLogin implements OnClickListener {

        private EditText txtUsername;
        private EditText txtPassword; 

        public OnClickListenerLogin (EditText userEditText, EditText passwordEditText) {
            this.txtUsername = userEditText;
            this.txtPassword = passwordEditText;
        }

       @Override
       public void onClick(View view) {
             String username = txtUsername.getText().toString();
             String password = txtPassword.getText().toString();

             Log.d("test", username + "-" + password);
       }
 }

在登录活动中,您可以执行以下操作

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(
      new OnClickListenerLogin(
          (EditText) findViewById(R.id.txtUsername), 
          (EditText) findViewById(R.id.txtPassword));
}

免责声明:我在这里直接输入了代码,由于拼写错误,未检查编译问题。我希望你能得到解决方案的精髓

答案 1 :(得分:1)

这里不需要外部课程

您只需将onClickListener设置为登录按钮,然后在onClick方法中执行操作。

public class LoginActivity extends Activity {
Button btnLogin;
EditText txtUsername,txtPassword;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    txtUsername = (EditText) findViewById(R.id.txtUsername);
    txtPassword = (EditText) findViewById(R.id.txtPassword);

    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {

           String username = txtUsername.getText().toString();
            String password = txtPassword.getText().toString();

            // your action here

        }
    });
}

}

答案 2 :(得分:0)

一种解决方案是简单地使onClickListener成为Login Class的内部类

O(n)

内部类主要是为了解决这些问题,请尝试阅读它们。

答案 3 :(得分:0)

这非常简单,所以你应该按照以下步骤从edittext获取值。

public class LoginActivity extends Activity implements OnClickListener{
Button btnLogin;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
        final EditText txtUsername = (EditText) formLogin.findViewById(R.id.txtUsername);
    final EditText txtPassword = (EditText) formLogin.findViewById(R.id.txtPassword)
    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new OnClickListenerLogin());



}

公开点击(查看视图) {

    String username = txtUsername.getText().toString();
    String password = txtPassword.getText().toString();

    Log.d("test", username + "-" + password);

} }