在不同文件中调用 EditText 值 class java Android
Call EditText value in different file class java Android
我正在学习使用外部 class。这个项目只是一个例子。我有一个扩展 Activity 的 class,在这个 class 中,我想访问我的登录按钮。而登录按钮将 运行 在 OnClickListenerLogin() 中实现 OnClickListener 的外部 class。
在 OnClickListenerLogin 中,我想在 Login.xml 中获取 EditText 值。但是每当我调用它时,值 returns ""。
我的代码中缺少什么以及我的 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);
}
}
您使用的视图与 LoginActivity 创建的视图不同。
您在 onClick
中膨胀视图的代码需要删除。
您可以通过为它实现一个构造函数,将对用户名和密码的 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);
}
}
在登录activity中,您可以进行以下操作
@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));
}
免责声明:我这里是直接输入代码,没有检查编译问题,是错字。我希望你得到解决方案的本质
一个解决方案是简单地将 onClickListener 设置为您登录 Class
的内部 class
public class LoginActivity extends Activity {
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
............
}
//inner class
class OnClickListenerLogin implements OnClickListener {
.........
}
}//Login class ends
内部 classes 的存在主要是为了解决这类问题,请尝试阅读它们。
这很简单,所以您应该按照下面的步骤从 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());
}
public点击(查看查看)
{
String username = txtUsername.getText().toString();
String password = txtPassword.getText().toString();
Log.d("test", username + "-" + password);
}
}
这里不需要外部class
您可以简单地将 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
}
});
}
}
我正在学习使用外部 class。这个项目只是一个例子。我有一个扩展 Activity 的 class,在这个 class 中,我想访问我的登录按钮。而登录按钮将 运行 在 OnClickListenerLogin() 中实现 OnClickListener 的外部 class。
在 OnClickListenerLogin 中,我想在 Login.xml 中获取 EditText 值。但是每当我调用它时,值 returns ""。
我的代码中缺少什么以及我的 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);
}
}
您使用的视图与 LoginActivity 创建的视图不同。
您在 onClick
中膨胀视图的代码需要删除。
您可以通过为它实现一个构造函数,将对用户名和密码的 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);
}
}
在登录activity中,您可以进行以下操作
@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));
}
免责声明:我这里是直接输入代码,没有检查编译问题,是错字。我希望你得到解决方案的本质
一个解决方案是简单地将 onClickListener 设置为您登录 Class
的内部 class public class LoginActivity extends Activity {
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
............
}
//inner class
class OnClickListenerLogin implements OnClickListener {
.........
}
}//Login class ends
内部 classes 的存在主要是为了解决这类问题,请尝试阅读它们。
这很简单,所以您应该按照下面的步骤从 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());
}
public点击(查看查看) {
String username = txtUsername.getText().toString();
String password = txtPassword.getText().toString();
Log.d("test", username + "-" + password);
} }
这里不需要外部class
您可以简单地将 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
}
});
}
}