Java 编辑文本与反思
我的问题有点特别 我在代码中显示:Java 编辑文本与反思,java,android,Java,Android,我的问题有点特别 我在代码中显示: import android.app.Activity; import android.content.Context; import android.widget.EditText; import java.lang.reflect.Field; import java.util.HashMap; public class MyActivity extends Activity { public HashMap initEditTe
import android.app.Activity;
import android.content.Context;
import android.widget.EditText;
import java.lang.reflect.Field;
import java.util.HashMap;
public class MyActivity extends Activity {
public HashMap initEditText(Context context){
HashMap list = new HashMap();
Field[] fields = context.getClass().getDeclaredFields();
for (Field field : fields){
if(field.getName().startsWith("e_")){
String word = field.getName().substring(2);
String firsCaract = word.substring(0, 1).toUpperCase();
String key = field.getName().substring(3);
try{
Class<?> cl = field.getType();
// To get the value of the member in the object: (object is an instance of MyClass)
//Object o = field.get(c);
if (EditText.class.isAssignableFrom(cl)) {
EditText value = (EditText) field.get(context);
list.put(firsCaract + key, value.getText().toString());
}
}
catch (IllegalAccessException e){
e.printStackTrace();
}
}
}
return list;
}
}`
TestActivity,继承MyActivity的子类
在MyActivity initEditText中,是一种方法,允许恢复所有以“e_”(更准确地说是EditText)开头的字段,并将其名称和值存储在HashMap中
在testivity中,我有两个编辑文本“e_prenom”和“e_nom”。通过调用HashMap中的initEditText I stock value,然后我移动并单击“验证”,该HahMap(“列表”)的内容将显示在文本视图(“显示”)中
因此,我希望有一个文本视图“Prenom_Du Con”“Nom_Du Puis”
但只显示“Prenom_Du Con”
有人知道为什么吗
经过几次调查和测试,我注意到这条线
Field[] fields = context.getClass().getDeclaredFields();
我所有的田地都被收回了
但是这里
if (EditText.class.isAssignableFrom(cl)) {
EditText value = (EditText) field.get(context);
list.put(firsCaract + key, value.getText().toString());
}
只有一个字段(EditText)的值被检索
是否存在我不知道的视图属性(在本例中,EditText准确),以及原因是什么?
这来自Field.get(Object Object)的属性?看起来您的问题与修饰符(public、private…)有关: 正如你所看到的,一个是公共的,另一个是私人的 要访问专用字段,请使其可访问:
field.setAccessible(true);
所以总体来说,它看起来像:
public HashMap initEditText(Context context){
HashMap list = new HashMap();
Field[] fields = context.getClass().getDeclaredFields();
for (Field field : fields){
field.setAccessible(true); //Add this line here
if(field.getName().startsWith("e_")){
String word = field.getName().substring(2);
String firsCaract = word.substring(0, 1).toUpperCase();
看起来您的问题与修改器(公共、私有…)有关: 正如你所看到的,一个是公共的,另一个是私人的 要访问专用字段,请使其可访问:
field.setAccessible(true);
所以总体来说,它看起来像:
public HashMap initEditText(Context context){
HashMap list = new HashMap();
Field[] fields = context.getClass().getDeclaredFields();
for (Field field : fields){
field.setAccessible(true); //Add this line here
if(field.getName().startsWith("e_")){
String word = field.getName().substring(2);
String firsCaract = word.substring(0, 1).toUpperCase();
你到底想要实现什么?你的目标是什么?对于我正在开发的应用程序,上面有许多EditText和一些处理方法。为了节省时间和代码,我想恢复列表中所有这些EditText的内容。我会将此列表发送给另一个类,该类将进行处理,以便将所有的
EditText
s添加到一些容器中,如ArrayList
或其他您真正想要实现的功能?你的目标是什么?对于我正在开发的应用程序,上面有许多EditText和一些处理方法。为了节省时间和代码,我想恢复列表中所有这些EditText的内容。我将把这个列表发送给另一个类,该类将进行处理,以便将所有的EditText
s添加到一些容器中,如ArrayList
或其他什么