Как правило, установите onClickListener на надутую кнопку XML - PullRequest
0 голосов
/ 28 июня 2011

У меня есть собственный текст редактирования, который действует как форма.Он имеет метку, редактировать текст и кнопку.Я использую тег, чтобы включить его в макет, чтобы я мог использовать форму повторно.Функция, которую я хочу, чтобы кнопка имела, - это воспроизведение формы при нажатии.Это возможно для меня по первому клику первой формы.Однако, когда я нажимаю кнопку новой формы, никаких действий не происходит.Однако, если я нажму первую кнопку формы, будет создана новая форма.Это мой xml: который я включаю.

<?xml version="1.0" encoding="utf-8"?>

<TextView android:id="@+id/form_textview"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:textSize="14sp" android:text="Number:" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText android:id="@+id/form_edittext"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_weight="1" />

    <ImageButton android:id="@+id/form_button"
        android:layout_width="wrap_content" android:layout_height="match_parent"
        android:src="@drawable/ic_menu_example" android:paddingLeft="1dp"
        android:paddingRight="1dp" />
</LinearLayout>

И вот как я пытаюсь динамически добавлять новые формы:

public final void onClick(final View view) 
{

    if (view == findViewById(R.id.form_button))
    {
        try{
            LinearLayout layout = (LinearLayout) findViewById(R.id.contacteditll);

                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View tempView = vi.inflate(R.layout.form, null);
                numberEntryViews.add(tempView);

                layout.addView(tempView);
                ImageButton btn = (ImageButton) tempView.findViewById(R.id.form_button);

                btn.setOnClickListener(this);
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Log.d(TAG, "Failed to inflate");
            }
        }
}

Я пробовал разные способы реализации этого, но мне не повезло.Любая помощь или предложения будет большое спасибо.

Ответы [ 2 ]

1 голос
/ 28 июня 2011

эта строка не будет истинной, если вы нажмете только что созданную кнопку

    if (view == findViewById(R.id.form_button))

, вы можете назначить фиксированный идентификатор только что созданной кнопке или попробовать работать со смещениями

0 голосов
/ 29 июня 2011

Я подумал, что мне нужно сделать кнопку уровня класса и просмотреть, чтобы обновить функцию кнопки из новой формы.

        try{
        LinearLayout layout = (LinearLayout) findViewById(R.id.contacteditll);
        LinearLayout layout2 = (LinearLayout) layout.findViewById(R.id.numbersll);

        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        tempView = vi.inflate(R.layout.form, null);
        numberEntryViews.add(tempView);

        layout2.addView(tempView);
        btn = (ImageButton) tempView.findViewById(R.id.form_button);
        //TODO: Work from here. Ask on Stack Overflow.
        btn.setOnClickListener(this);
    }
    catch (Exception e)
    {
        e.printStackTrace();
        Log.d(TAG, "Failed to inflate");
    }

btn является уровнем класса и обновляется при каждом нажатии. Удаляет функцию с последней кнопки, которая имеет смысл в моем случае.

...