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
或其他什么