Как получить значение из динамически созданного текста редактирования в Android?

Как получить значение из динамически созданного EditText в Android?

Это мой динамический вид (файл XML)

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_waypoint"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/background"
            android:hint="Way Points"
            android:padding="10dp"
            android:textSize="16sp" />

        <Button
            android:id="@+id/btn_waypoint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Find" />
    </LinearLayout> 

И я использую LayoutInflater, потому что мне нужен идеальный макет, который я не могу выполнить с помощью setLayoutParams, поэтому я использую LayoutInflater.

И вот мой код:

  LayoutInflater l = getLayoutInflater();
                    final LinearLayout mainActivity = (LinearLayout) findViewById(R.id.dynamic);
                    final View view = l.inflate(R.layout.dynamic_layout_waypoints, null);
                    buttonWayPoints = (Button) view.findViewById(R.id.btn_waypoint);
                    editTextWayPoints = (EditText) view.findViewById(R.id.et_waypoint);
 mainActivity.addView(editTextWayPoints);

Я новичок в Android. Большинство людей предлагают это решение, но оно не сработало для меня, проблема в том, что когда я реализую этот код, мой ADD НОВАЯ КНОПКА ИЗМЕНЕНИЯ ТЕКСТА не отвечает мне.

Вот как я пытаюсь получить вставленное значение, но оно возвращает значение только последнего созданного текста редактирования:

public Cursor getPerson(String Query) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(Query, null);
        return c;
    }

sb is StringBuilder sb;, w is String w;

String queryWayPoints = "select * from route_table where trip_id = " + t;
            Cursor s = myDb.getPerson(queryWayPoints);
            int count3 = s.getCount();
            for (int j = 0; j < count3; j++) {
                s.moveToNext();
                w = s.getString(s.getColumnIndex("waypoints"));
                // se.append(w + "." + "00");
            }
            trip_name.setText(n);
            trip_date.setText(d);
            sb.append(w);
        }
        trip_route.setText(sb.toString());

person Ravi Vaniya    schedule 27.04.2017    source источник
comment
Можете сюда выложить лог ошибок   -  person Dishonered    schedule 27.04.2017
comment
editTextWayPoints.getText().toString() должен получить текст из вашего EditText.   -  person Vladyslav Matviienko    schedule 27.04.2017
comment
Обратите внимание, что добавление криков или советов по голосованию, как правило, привлекает отрицательные голоса, и вдвойне, если вы делаете и то, и другое. Пожалуйста, воздержитесь от добавления чего-либо в свои сообщения.   -  person halfer    schedule 28.04.2017


Ответы (2)


Хотя я так и не понял, в чем именно заключается ваш вопрос, но все же постараюсь помочь. Что именно делает этот код, так это то, что при нажатии кнопки сверху новый макет (тот, который вы хотели) добавит на экран активности во время выполнения, то есть текст редактирования с кнопкой, и когда вы нажмете на эту кнопку, тост с значение соответствующего edittext будет показано. Следовательно, решение проблемы получения значения динамически добавляемого текста редактирования

Основное действие

public class MainActivity extends AppCompatActivity {
    Button generateET;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final LinearLayout myLinearLay = (LinearLayout) findViewById(R.id.dynamic);
        generateET = (Button) findViewById(R.id.generateBtn);
        generateET.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater l = getLayoutInflater();
                final View viewToAdd = l.inflate(R.layout.to_add, null);
                Button buttonWayPoints = (Button) viewToAdd.findViewById(R.id.btn_waypoint);
                final EditText editTextWayPoints = (EditText) viewToAdd.findViewById(R.id.et_waypoint);

                buttonWayPoints.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (editTextWayPoints.getText().toString() != null) {
                            Toast.makeText(MainActivity.this, editTextWayPoints.getText().toString(), Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(MainActivity.this, "No text found", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                myLinearLay.addView(viewToAdd);

            }
        });

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.techmahindra.stackques.MainActivity">

    <Button
        android:id="@+id/generateBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="add editText To layout" />

    <ScrollView
        android:layout_below="@+id/generateBtn"

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true">

        <LinearLayout
            android:id="@+id/dynamic"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
          ></LinearLayout>
    </ScrollView>

</RelativeLayout>

to_add.xml (макет, который будет увеличиваться во время выполнения)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/et_waypoint"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:hint="Way Points"
        android:padding="10dp"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btn_waypoint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Find" />
</LinearLayout>
person Ankit Purwar    schedule 27.04.2017
comment
такс @ankitpurwar - person Ravi Vaniya; 28.04.2017
comment
Добро пожаловать, @RayVaniya Надеюсь, это решило вашу проблему. Кроме того, пожалуйста, проголосуйте, если вы нашли это полезным. - person Ankit Purwar; 28.04.2017

Есть некоторые проблемы с вашим кодом. Вы пытаетесь добавить editTextWayPoints в mainActivity, но у editTextWayPoints уже есть родитель, которым является представление. Я думаю, вам следует добавить представление в mainActivity (mainActivity.addView(view)). Наконец, чтобы получить доступ к значению editTextWayPoints, вы просто делаете editTextWayPoints.getText().toString();

person The Hungry Androider    schedule 27.04.2017
comment
я могу создать представление, но не могу получить значение, оно возвращает значение моего последнего созданного текста редактирования - person Ravi Vaniya; 27.04.2017
comment
См. мой ответ на этот вопрос: stackoverflow.com/questions/43527340/ - person The Hungry Androider; 27.04.2017