1

2つのフラグメントを含むaHorizontalScrollViewがあります。フラグメントAにはリストがあり、フラグメントBにはフラグメントAで選択したアイテムの詳細が表示されます。両方のフラグメントには特定の幅があるため、合計幅が画面よりも大きく、水平スクロールが有効になっています。 。可能な詳細ビューの1つには、。を含むフォームが含まれていますEditText

JellyBeanの前は、詳細フラグメントを置き換えても、水平スクロールの位置に影響を与えることはありませんでした。しかし、4.1.1では、ユーザーがフォームタイプの詳細を含むアイテムを選択し、EditTextをクリックしてから別のアイテムを選択した場合(キーボードを非表示にするには戻るを押し、両方のフラグメントが表示されるように少し右にスクロールします)、HorizontalScrollView0にスクロールして戻ります。

FragmentLayoutApiDemosに基づいた問題を示すコードを次に示します。

package com.example.testproject;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.util.TypedValue;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;


public class FragmentLayout extends FragmentActivity {

    public static final String[] TITLES = { "Row 1", "Row 2", "Row 3", "Row 4",
            "Row with EditText as detail" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_layout);

        Fragment sideList = getSupportFragmentManager().findFragmentById(
                R.id.titles);
        if (sideList == null) {
            sideList = new TitlesFragment();
            FragmentTransaction ft = getSupportFragmentManager()
                    .beginTransaction();
            ft.replace(R.id.titles, sideList, "side_list").commit();

        }

    }

    public static class TitlesFragment extends ListFragment {

        int mCurCheckPosition = 0;

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);


            setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_activated_1,
                    TITLES));



            if (savedInstanceState != null) {

                mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
            }


            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

            showDetails(mCurCheckPosition);

        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt("curChoice", mCurCheckPosition);
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            showDetails(position);
        }


        void showDetails(int index) {
            mCurCheckPosition = index;

            getListView().setItemChecked(index, true);
            Fragment details = getFragmentManager().findFragmentById(
                    R.id.details);
            if (index < 4) {
                details = DetailsFragment.newInstance(index);
            } else {
                details = FormFragment.newInstance(index);
            }

            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.details, details);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();

        }
    }


    public static class DetailsFragment extends Fragment {

        public static DetailsFragment newInstance(int index) {
            DetailsFragment f = new DetailsFragment();
            Bundle args = new Bundle();
            args.putInt("index", index);
            f.setArguments(args);

            return f;
        }

        public int getShownIndex() {
            return getArguments().getInt("index", 0);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            if (container == null) {
                    return null;
            }
            Display display = getActivity().getWindowManager()
                    .getDefaultDisplay();
            LinearLayout l = new LinearLayout(getActivity());
            TextView text = new TextView(getActivity());
            l.addView(text);
            text.getLayoutParams().width = display.getWidth();

            int padding = (int) TypedValue.applyDimension(
                    TypedValue.COMPLEX_UNIT_DIP, 4, getActivity()
                            .getResources().getDisplayMetrics());
            text.setPadding(padding, padding, padding, padding);
                    // use the ApiDemos Shakespeare.java file for the DIALOGUe
            text.setText(Shakespeare.DIALOGUE[getShownIndex()]);

            return l;
        }
    }

    public static class FormFragment extends Fragment {

        public static FormFragment newInstance(int index) {
            FormFragment f = new FormFragment();
            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            if (container == null) {
                    return null;
            }

            Display display = getActivity().getWindowManager()
                    .getDefaultDisplay();
            LinearLayout l = new LinearLayout(getActivity());
            EditText text = new EditText(getActivity());
            l.addView(text);
            text.getLayoutParams().width = display.getWidth();
            return l;
        }
    }

}

そして唯一の興味深いxmlfragment_layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <FrameLayout
            android:id="@+id/titles"
            android:layout_width="300dip"
            android:layout_height="fill_parent" />

        <FrameLayout
            android:id="@+id/details"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:background="?android:attr/detailsElementBackground" />
    </LinearLayout>

</HorizontalScrollView>
4

0 に答える 0