Фрагменты Android Редактировать текст Кнопка Фокус - PullRequest
0 голосов
/ 19 января 2012

, будучи новичком в разработке приложений для Android, я столкнулся с проблемой взаимодействия фрагментов Android, текстов редактирования, фокуса и кнопок.

У меня есть один фрагмент активности с несколькими вкладками. Большинство вкладок имеют по одному фрагменту. Но в одной вкладке у меня есть ListFragment и фрагмент с правками и кнопками, которые я называю редактировать фрагмент Когда пользователь выбирает элемент списка, содержимое фрагмента редактирования отображается на текущей вкладке. При попытке редактировать текст там, точнее, при нажатии клавиши, отличной от клавиши возврата, новый символ не отображается, но первая кнопка ниже получает фокус. Зачем? И как я могу избежать этого поведения?

Ранее у меня была другая активность для фрагмента редактирования, и редактирование работало отлично. Но по другим причинам и потому, что это рекомендуется, у меня сейчас только одно занятие. Спасибо за помощь!

xml для project_details1:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/projectDetails">
            <LinearLayout
                    android:id="@+id/projectDetailsButtons"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="2"
                    android:layout_alignParentBottom="true"
                    android:orientation="horizontal"
                    android:background="#656565"
                    android:padding="5dp">
                    <Button android:id="@+id/projectDetailsButton_save" 
                            android:text="@string/save"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="2" />
                    <Button android:id="@+id/projectDetailsButton_cancel" 
                            android:text="@string/cancel"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="2" />
            </LinearLayout>
            <ScrollView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_alignParentTop="true"
                    android:layout_above="@id/projectDetailsButtons">
            <TableLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="15dip"
            android:background="@color/myColor"
            android:shrinkColumns="*"
            android:stretchColumns="*" >
            <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                    android:text="@string/projectNo" />
                <TextView
                    android:id="@+id/projectDetailsProjectNr"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:text="@string/projectNo"
                    android:padding="3dip" >
                </TextView>
            </TableRow>
            <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                    android:text="@string/description" />
                <EditText
                    android:id="@+id/projectDetailsProjectDescription"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:background="@android:drawable/editbox_background"
                    android:inputType="text"
                    android:padding="3dip" >
                </EditText>
            </TableRow>
            <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                     />
                <EditText
                    android:id="@+id/projectDetailsClientName"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:inputType="text"
                    android:background="@android:drawable/editbox_background"
                    android:padding="3dip" >
                </EditText>
            </TableRow>
            <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                    android:text="@string/customerNo" />
                <EditText
                    android:id="@+id/projectDetailsClientNr"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:inputType="numberSigned"
                    android:background="@android:drawable/editbox_background"
                    android:padding="3dip" >
                </EditText>
            </TableRow>
             <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                    android:text="@string/bookingNo" />
                <EditText
                    android:id="@+id/projectDetailsBookingNr"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:background="@android:drawable/editbox_background"
                    android:inputType="numberSigned"
                    android:padding="3dip" >
                </EditText>
            </TableRow>
            <TableRow>
                <TextView
                    android:layout_width="0dip"
                    android:layout_column="0"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:padding="3dip"
                    android:text="@string/orderNo" />
                <EditText
                    android:id="@+id/projectDetailsOrderNr"
                    android:layout_width="0dip"
                    android:layout_column="1"
                    android:layout_gravity="center_vertical"
                    android:layout_span="1"
                    android:layout_weight="1"
                    android:background="@android:drawable/editbox_background"
                    android:inputType="numberSigned"
                    android:padding="3dip" >
                </EditText>
            </TableRow>
    </TableLayout>
    </ScrollView>
    </RelativeLayout>

метод fillEditTexts:

  private void fillEditTexts(final View view){
        final Project project = this.getShownProject();
        final EditText projectDescription = (EditText)view.findViewById(R.id.projectDetailsProjectDescription);

        final TextView projectNumber = (TextView)view.findViewById(R.id.projectDetailsProjectNr);
        final EditText bookingNumber = (EditText)view.findViewById(R.id.projectDetailsBookingNr);
        final EditText orderNumber = (EditText)view.findViewById(R.id.projectDetailsOrderNr);
        if(project!=null){
            projectDescription.setText(project.getProjectDescription() == null ? " ": project.getProjectDescription());
            if(project.getProjectNumber()!=null){
                projectNumber.setText(project.getProjectNumber().toString());
            }
            if(project.getBookingNumber()!=null){
                bookingNumber.setText(project.getBookingNumber().toString());
            }
            if(project.getOrderNumber()!=null){
                orderNumber.setText(project.getOrderNumber().toString());
            }
        }

        final Button cancel = (Button) view.findViewById(R.id.projectDetailsButton_cancel);
        cancel.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                ProjectDetailsFragment.this.goBack();
            }
        });

        final Button save = (Button) view.findViewById(R.id.projectDetailsButton_save);
        save.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                ProjectDetailsFragment.this.saveChanges(view);
                ProjectDetailsFragment.this.goBack();
            }
        });
    }

1 Ответ

1 голос
/ 19 января 2012

Ну, во-первых ... Я не думаю, что ваш макет будет отображать то, что вы хотите, чтобы он отображал.Похоже, вы хотите, чтобы ваш макет содержал LinearLayout с отображением кнопок и ScrollView с отображением таблицы, правильно?Если это так, вы должны использовать LinearLayoutandroid:orientation="vertical". Затем убедитесь, что вы заказываете дочерние представления так, как вы хотите, чтобы они отображались; если вы хотите, чтобы кнопки отображались ниже ScrollView, скопируйтеи вставьте LinearLayout, который удерживает кнопки внизу файла. Он должен выглядеть примерно так:

<LinearLayout>

    <ScrollView>
        <!-- display the grid -->
    </ScrollView>

    <LinearLayout>
        <!-- display the two buttons side by side -->
    </LinearLayout> 

</LinearLayout>

Вам придется избавиться от следующих атрибутов в вашем ScrollView, еслив конечном итоге вы переключаетесь на LinearLayout (поскольку они не поддерживаются классом): android:layout_alignParentTop="true" и android:layout_above="@id/projectDetailsButtons".

Вам также следует опасаться атрибута android:layout_weight. В общем,Вы хотите попытаться избежать использования вложенных весов, так как вычисление этих весов неэффективно и замедляет процесс рисования представлений на экране. Например, вам не нужен атрибут layout_weight="2" для любой из кнопок, так как эта информацияявляется избыточным - при удалении обоих атрибутов веса по умолчанию веса будут равны «0», что должно иметь тот же эффект.

При этом, я не уверен, если makiЭти изменения решат вашу проблему, если я не увижу больше вашего кода, но это определенно шаг в правильном направлении.Если бы я угадал, в чем проблема, я бы сказал, что ваш Fragment не может правильно раздувать макет в onCreateView(), потому что ваш XML-файл завален вложенными макетами, которые на самом деле не отображают их представления.так, как вы хотите.Попробуйте внести некоторые изменения и скажите мне, как это происходит.

...