21

WebViewAndroid 4.x デバイスの 1 つに問題があります。

Android アプリにはFragmentsを含むTabhostがあります。フラグメントの 1 つに Web ビューが含まれています。表示されたページには、次のようなドロップダウン メニューがあります。

<select id="mySelect" name="mySelect">
    <option value="1">Testname 1</option>
    <option value="2">Testname 2</option>
    <option value="3">Testname 3</option>
</select>

Android 4.1.1 を搭載した Galaxy S3 (またはその他の Android デバイス) でアプリを開くと、「Testname 1」、「Testname 2」などを選択できます。

Galaxy Nexus (Android 4.1.1、4.1.2、および 4.2 を実行しているさまざまなデバイスで確認済み) で、UI がブロックするものを選択しようとすると。別のタブに切り替えて webview タブに戻ると、突然 UI が以前に選択した項目に変わります。

これを引き起こしている原因や、Galaxy Nexus でこれを修正する方法はありますか?

重要な更新: まで追跡できましたTabhost。あると動かない、入っていないと動くwebviewこれは、この問題tabhostに関連している可能性があります。

4

5 に答える 5

1

実際には、TabHost だけでできるよりも、ActionBar を使用して多くのことができます。タブを含む。リンクを使用すると、古いバージョンで ActionBar を実装できるようになります minSdk = 4. 私が一緒に仕事をしたユーザー エクスペリエンス開発者の大部分は、タブはユーザーに使い慣れた UI を提供しますが、一種の時代遅れだと考えています。風?ActionBar は、非常に Android 固有の外観とクリーンな UI を提供します。リンクは、その会議から Google が推奨する UI パターンに関するドキュメントです。リンクは、カンファレンスの UI パターンについて説明している YouTube ビデオです。これらの推奨事項に従うことで、アプリケーションのより良いレビューと、より洗練された UI の外観を得ることができます。あなたのニーズが何であるかはわかりませんが、何かをするつもりなら、それを正しく行うことはできますか? さらにヘルプが必要な場合は、お知らせください。ActionBar の使用例を入手できます。ActionBar へのリンクは、UI に適した理由をいくつか示してくれます。

フラグメントを正しく実装していますか? リンクは、それらの使用に関するドキュメントです。レイアウトに実装された固定フラグメントの代わりに動的フラグメントを使用している場合、複数のアプリケーションにまたがって記述しているときに見つけた 1 つのトリックは、.clearBackStack(); を呼び出すことです。私が面白い問題を抱えていて、多くの問題を解決しているように見えるとき。

于 2012-12-21T12:52:41.553 に答える
0

通常のTabHostの代わりに、XMLレイアウトでこのカスタムクラスを使用してみてください。

package com.example.test;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TabHost;

public class TabHostFix extends TabHost
{
    public TabHostFix(Context context)
    {
        super(context);
    }

    public TabHostFix(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    public void onTouchModeChanged(boolean isInTouchMode)
    {
        //do not call through to base class, do nothing
        //this is a fix for tabhost stealing focus from textboxes
    }
}

次のように、XMLレイアウトでカスタムクラスを参照します。

<?xml version="1.0" encoding="utf-8"?>
<com.example.test.TabHostFix xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_weight="0"/>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
        <FrameLayout
            android:id="@+android:id/realtabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</com.example.test.TabHostFix>

編集:別の解決策として、サポートライブラリのViewPagerとタブを模倣したカスタムのView Pagerインジケーターを使用して、TabHostを完全に置き換えることができる場合があります。私はこれまでこれを試したことがありませんが、ここに優れた無料のサードパーティビューページャーインジケーターがあることを読みました

于 2013-01-29T05:15:30.823 に答える
0

ICS のタブホスト? 互換パッケージを使用していますか? 基本的に 3.1 以降で作業している場合、適切な設計は、ActionBar を使用してタブを実装することです。

于 2012-12-19T21:02:44.690 に答える
0

選択を選択した後、リスト項目のデータが変更される可能性がありますが、変更は確認できません。そのためには、select コンポーネントを明示的に更新する必要があります。これで問題が解決することを願っています。

$("select#HeightUnit option[value='cm']").attr("selected", "selected"); $('select').selectmenu('refresh');

于 2013-06-10T14:07:20.180 に答える
-2
> i think u must add the API version on your activity cause some UI cannot compatible on >android API 8. so check the API SDK like this.

>@TargetApi(Build.VERSION_CODES.GINGERBREAD)
>if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD)
>{
>// condisition
>}
于 2013-07-03T04:46:20.833 に答える