Android - 手动充气列表视图行上的自定义键盘未显示

时间:2014-12-03 02:31:17

标签: android listview android-listview keyboard

美好的一天。

我有一个Android应用程序。在我的应用程序中,我有一个自定义listView,其中包含5列textViews。用户可以单击行,一旦他执行,行布局将更改,将最后2个textViews更改为EditTexts。然后我将新的EditTexts注册到我的自定义键盘taken from this example上 - 请注意,我对自定义键盘类以及如何使其在主布局中工作的示例进行了功能性复制粘贴。但是,当我单击行中的EditText时,我的自定义键盘根本不显示。

我有一个全局变量:

CustomKeyboard mCustomKeyboard;

在活动的onCreate()方法中,我这样做:

mCustomKeyboard= new CustomKeyboard(this, R.id.keyboardview, R.xml.custom_keyboard);

这是我的布局,我在Layout的底部有了KeyboardView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".SearchResult" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

    <!-- A lot of views go here, enclosed in my linear layout -->

    </LinearLayout>

    <android.inputmethodservice.KeyboardView
        android:id="@+id/keyboardview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:visibility="gone" />
</RelativeLayout>

以下是更改布局的代码。我所做的是从旧布局中获取行值,获取新布局search_result_inflate,然后使用我得到的值设置新布局的文本。在充气布局后请注意mCustomKeyboard.registerEditText(R.id.qtyInputSearchResult);行:

private void changeLayout(final View view){

    //get views from old layout
    TextView textViewQuantity = (TextView)view.findViewById(R.id.qtyInput);
    TextView textViewDiscountReq = (TextView)view.findViewById(R.id.discInput);
    TextView textViewName = (TextView)view.findViewById(R.id.dialogItemName);
    TextView textViewPrice = (TextView)view.findViewById(R.id.price);
    TextView textViewDiscount = (TextView)view.findViewById(R.id.discount);

    //store values in strings
    String itemName = textViewName.getText().toString();
    String itemPrice = textViewPrice.getText().toString();
    String itemDiscount = textViewDiscount.getText().toString();
    String itemQty = textViewQuantity.getText().toString();
    String itemDisc = textViewDiscountReq.getText().toString();

    //set the view to gone
    textViewQuantity.setVisibility(View.GONE);
    textViewDiscountReq.setVisibility(View.GONE);
    textViewName.setVisibility(View.GONE);
    textViewPrice.setVisibility(View.GONE);
    textViewDiscount.setVisibility(View.GONE);

    //get the old layout
    LinearLayout ll_inflate = (LinearLayout)view.findViewById(R.id.search_result_layout);

    //get the inflate/new view
    View child = getLayoutInflater().inflate(R.layout.search_result_inflate, null);

    //get the views in the new view, populate them
    TextView newName = (TextView)child.findViewById(R.id.dialogItemName);
    newName.setText(itemName);

    TextView newDiscount = (TextView)child.findViewById(R.id.discount);
    newDiscount.setText(itemDiscount);

    TextView newPrice = (TextView)child.findViewById(R.id.price);
    newPrice.setText(itemPrice);

    EditText qtyInput = (EditText)child.findViewById(R.id.qtyInputSearchResult);
    qtyInput.setText(itemQty);

    EditText discInput = (EditText)child.findViewById(R.id.discInputSearchResult);
    discInput.setText(itemDisc);

    //show new layout
    ll_inflate.removeAllViews();
    ll_inflate.removeAllViewsInLayout();
    ll_inflate.addView(child);

    mCustomKeyboard.registerEditText(R.id.qtyInputSearchResult); 
}

这是我的search_result_inflate.xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_result_inflate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip"
    android:weightSum="1" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal"
        android:padding="1dip" >

        <TextView
            android:id="@+id/dialogItemName"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.54"
            android:gravity="center"
            android:text="Item Name"
            android:textSize="23sp" />

        <TextView
            android:id="@+id/price"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.14"
            android:gravity="center"
            android:text="Price"
            android:textSize="23sp" />

        <TextView
            android:id="@+id/discount"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.10"
            android:gravity="center"
            android:text="Discount"
            android:textSize="23sp" />

        <EditText
            android:id="@+id/qtyInputSearchResult"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.14"
            android:background="@layout/edittext_selector"
            android:gravity="center"
            android:hint="qtyInput"
            android:textColorHighlight="@color/white_opaque"
            android:textSize="23sp" >
        </EditText>

        <EditText
            android:id="@+id/discInputSearchResult"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.11"
            android:background="@layout/edittext_selector"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="center"
            android:hint="discInput"
            android:textColorHighlight="@color/white_opaque"
            android:textSize="23sp" />
    </LinearLayout>

</LinearLayout>

如您所见,我有2个editTexts,我将qtyInputSearchResult注册到自定义键盘类。但是,自定义键盘不会显示。

我还试图在另一个活动的editText上使用自定义键盘类,它工作得很好。我在这里错过了什么吗?我很困惑为什么自定义键盘没有正确显示。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

知道了,我将键盘布局放在search_result_inflate.xml中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_result_inflate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip"
    android:weightSum="1" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal"
        android:padding="1dip" >

        <!-- a lot of components here -->

    </LinearLayout>

    <android.inputmethodservice.KeyboardView
        android:id="@+id/keyboardview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:visibility="gone" />

</RelativeLayout>