Виджет EditText в ListView в Tabactivty на Android 4.01 Ice Cream Sandwich Galaxy Nexus - PullRequest
1 голос
/ 29 января 2012

решено:

Я решил свою проблему.Я сделал что-то еще, чтобы получить желаемую функциональность.Оказывается, что наличие tabHost в scrollView было проблемой, но это только проблема для Android 4.0+, насколько я тестировал.Приведенный ниже код позволяет мне «сжать» вкладку, что позволяет моему приложению работать в полноэкранном режиме.Я надеюсь, что это когда-нибудь поможет кому-то xD.

public class MyScaler extends ScaleAnimation
{
    private View         mView;

    private LayoutParams mLayoutParams;

    private int          mMarginBottomFromY, mMarginBottomToY;

    private boolean      mVanishAfter = false;

    public MyScaler(float fromX, float toX, float fromY, float toY, int duration, View view, boolean vanishAfter)
    {
        super(fromX, toX, fromY, toY);
        setDuration(duration);
        mView = view;
        mVanishAfter = vanishAfter;
        mLayoutParams = (LayoutParams) view.getLayoutParams();
        final int height = mView.getHeight();

        if(fromY > toY)
        {
            mMarginBottomFromY = (int) (height * fromY) + mLayoutParams.bottomMargin - height;
            mMarginBottomToY = (int) (0 - ((height * toY) + mLayoutParams.bottomMargin)) - height;

        }
        else
        {
            mMarginBottomFromY = mLayoutParams.bottomMargin;
            mMarginBottomToY = 0;
            mView.setVisibility(View.VISIBLE);
        }

    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t)
    {
        super.applyTransformation(interpolatedTime, t);

        if (interpolatedTime < 1.0f)
        {
            int newMarginBottom = mMarginBottomFromY + (int) ((mMarginBottomToY - mMarginBottomFromY) * interpolatedTime);
            mLayoutParams.setMargins(mLayoutParams.leftMargin, mLayoutParams.topMargin, mLayoutParams.rightMargin, newMarginBottom);
            mView.getParent().requestLayout();
        }
        else if (mVanishAfter)
        {
            mView.setVisibility(View.GONE);
        }
        else if(!mVanishAfter)
        {
            mLayoutParams.setMargins(mLayoutParams.leftMargin, mLayoutParams.topMargin, mLayoutParams.rightMargin, 0);
            mView.getParent().requestLayout();
        }

    }



}

Привет всем :) Я работал с Android / iOS чуть больше года, и я занимался C / C ++ около 5 лет как хобби.Этот код также является хобби-проектом.

У меня довольно специфический вопрос ... В настоящее время я занимаюсь разработкой своего приложения на Galaxy Nexus. Запуск из коробки Android 4.01 Я также проверял это на 4.02 - тоже самое.

Моя проблема:

У меня есть несколько представлений edittext в LineayLayouts в виде списка с использованием подкласса BaseAdapter.Всякий раз, когда я дважды щелкаю или «долго щелкаю» это представление, и оно содержит текст, мое приложение падает и выдает исключение IllegalStateException.См. Стек вызовов ниже. Обычно это (в Android 4.0+ и, я предполагаю, 3.2+) создает панель параметров с различными параметрами копирования / вставки.

Мое приложение состоит из Tabactivity с 4 вкладками.Эти вкладки сделаны через 4 "дочерних действия".Мой Tabhost окружен видом прокрутки, чтобы я мог перейти на «полный экран» и удалить вкладку, но я не думаю, что это проблема.Моя проблема существует во всех 4 вкладках.

Все вышеперечисленное прекрасно работает на 4 других устройствах, включая: HTC Desire, Samsung Galaxy S 2, HTC Hero и эмулятор под управлением 2.3.3.(Я не могу запустить эмулятор 4.0 на моем i7 1.6 quad, потому что он будет использовать только 1/8 вычислительной мощности)

Однако, когда у меня есть Edittext-представление во всплывающем окне, таком как AlertDialog, тогдафункция двойного щелчка / длинного щелчка, чтобы пометить текст, работает отлично, а новая панель 4.0 в верхней части экрана с такими параметрами, как вырезать, копировать и вставлять, всплывает и работает просто отлично.

Я пытался найти решение самостоятельно и в Интернете, но мне не удалось найти какую-либо информацию.Я обнаружил, что люди испытывали проблемы с edittext и Listviews раньше.И я попытался поместить мои представления Edittext в LinearLayouts в один огромный LinearLayout вместо Listview, но это не имело никакого значения.

Любой вклад будет принята с благодарностью!Пожалуйста, скажите мне, если вам нужно больше информации!:) Thx :)

Редактировать:

Я провел еще несколько исследований и попытался создать приложение с точно такой же компоновкой, но без просмотра прокрутки, окружающего мой tabhost.Это работает.Но не решает мою проблему, если я не хочу переписать большую часть моего макета.

Это мой Main.xml

<my.pack.MyScrollView xmlns:android="http://schemas.android.com/apk/res/android">          

    <LinearLayout android:orientation="vertical" android:id="@+id/ScrollLayout"
        android:layout_width="match_parent" android:layout_height="wrap_content">

        <TabHost 
            android:id="@android:id/tabhost"   android:layout_width="match_parent"
            android:layout_height="wrap_content">

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

                <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/tabs" android:layout_width="fill_parent"
                    android:layout_height="wrap_content" android:padding="0px"
                    android:layout_margin="0px" android:background="@drawable/horizontaltabbackground">

                    <TabWidget android:id="@android:id/tabs"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        android:padding="0px" android:layout_margin="0px" />

                </HorizontalScrollView>

                <FrameLayout android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ff000000"/>

            </LinearLayout>

        </TabHost>

    </LinearLayout>

</my.pack.MyScrollView>

Стек вызовов из Eclipse:

Thread [<1> main] (Suspended (exception IllegalStateException)) 
    ActionBarContextView.onMeasure(int, int) line: 328  
    ActionBarContextView(View).measure(int, int) line: 12603    
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1369 
    LinearLayout.measureVertical(int, int) line: 660    
    LinearLayout.onMeasure(int, int) line: 553  
    LinearLayout(View).measure(int, int) line: 12603    
    PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677   
    PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 293    
    PhoneWindow$DecorView.onMeasure(int, int) line: 2072    
    PhoneWindow$DecorView(View).measure(int, int) line: 12603   
    FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677 
    FrameLayout.onMeasure(int, int) line: 293   
    FrameLayout(View).measure(int, int) line: 12603 
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1369 
    LinearLayout.measureVertical(int, int) line: 660    
    LinearLayout.onMeasure(int, int) line: 553  
    LinearLayout(View).measure(int, int) line: 12603    
    TabHost(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677 
    TabHost(FrameLayout).onMeasure(int, int) line: 293  
    TabHost(View).measure(int, int) line: 12603 
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1369 
    LinearLayout.measureVertical(int, int) line: 660    
    LinearLayout.onMeasure(int, int) line: 553  
    LinearLayout(View).measure(int, int) line: 12603    
    MyScrollView(ScrollView).measureChildWithMargins(View, int, int, int, int) line: 1163   
    MyScrollView(FrameLayout).onMeasure(int, int) line: 293 
    MyScrollView(ScrollView).onMeasure(int, int) line: 312  
    MyScrollView(View).measure(int, int) line: 12603    
    FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677 
    FrameLayout.onMeasure(int, int) line: 293   
    FrameLayout(View).measure(int, int) line: 12603 
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1369 
    LinearLayout.measureVertical(int, int) line: 660    
    LinearLayout.onMeasure(int, int) line: 553  
    LinearLayout(View).measure(int, int) line: 12603    
    PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4677   
    PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 293    
    PhoneWindow$DecorView.onMeasure(int, int) line: 2072    
    PhoneWindow$DecorView(View).measure(int, int) line: 12603   
    ViewRootImpl.performTraversals() line: 1044 
    ViewRootImpl.handleMessage(Message) line: 2418  
    ViewRootImpl(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 4340    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 511  
    ZygoteInit$MethodAndArgsCaller.run() line: 784  
    ZygoteInit.main(String[]) line: 551 
    NativeStart.main(String[]) line: not available [native method]  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...