android片段edittext按钮焦点

时间:2012-01-19 14:33:32

标签: android button focus android-fragments android-edittext

是Android应用程序开发的新手,我遇到了关于android片段,edittexts,焦点和按钮的交互的问题。

我有一个包含多个标签的片段活动。大多数标签每个都有一个片段。但是在一个标签中,我有一个ListFragment和一个带有edittexts和按钮的片段,我称之为编辑片段。当用户选择列表项时,编辑片段的内容显示在当前选项卡中。当尝试编辑文本时,更准确地说,当击中与退格键不同的键时,新的字符不会显示,但下面的第一个按钮获得焦点。为什么?我怎样才能避免这种行为?

之前,我对编辑片段有不同的活动,编辑效果很好。但由于其他原因并且因为建议,我现在只有一项活动。谢谢你的帮助!

project_details1的xml:

<?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 个答案:

答案 0 :(得分:1)

嗯,首先......我不认为你的布局最终会显示你想要显示的内容。看起来您希望您的布局包含显示按钮的LinearLayout和显示表格的ScrollView,对吗?如果是这种情况,您应该使用LinearLayoutandroid:orientation="vertical"。然后确保您按照希望的方式订购子视图;如果您希望按钮显示在{{下方1}},然后将保存按钮的ScrollView复制并粘贴到文件的底部。它应该看起来像这样,

LinearLayout

如果您最终切换到<LinearLayout> <ScrollView> <!-- display the grid --> </ScrollView> <LinearLayout> <!-- display the two buttons side by side --> </LinearLayout> </LinearLayout> (因为课程不支持),您必须删除ScrollView中的以下属性:LinearLayoutandroid:layout_alignParentTop="true"

您还应该警惕android:layout_above="@id/projectDetailsButtons"属性。通常,您希望尝试避免使用嵌套权重,因为计算这些权重效率低下并且减慢了在屏幕上绘制视图的过程。例如,您不需要任何按钮的android:layout_weight属性,因为此信息是多余的 - 删除两个权重属性将使权重默认为“0”,这应该具有相同的效果

话虽如此,我无法确定进行这些更改是否会解决您的问题,除非我看到更多您的代码,但这绝对是朝着正确方向迈出的一步。如果我猜测问题是什么,我会说你的layout_weight="2"无法在Fragment中正确地扩充布局,因为你的XML文件充斥着嵌套的布局以您希望的方式显示他们的观点。尝试做一些更改并告诉我它是如何进行的。