4

このリスト ビューの項目に問題があります。通常の動作では、ユーザーが 1 つのアイテムをタップすると、背景色がオレンジ色に変わります。これは私のアプリでは発生していません。理由がわかりません。

main.xml には次のものがあります。

<android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

フラグメントの xml には次のものしかありません。

<ListView
        android:id="@android:id/list"
        style="@style/MyListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

listView アイテム内で膨らませるビューは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/imageView1"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignLeft="@+id/textViewName"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:src="@drawable/bottom_arrow" />

</RelativeLayout>

ListView に定義したスタイルは次のとおりです。

<style name="MyListView" parent="@android:style/Widget.ListView.White">
        <item name="android:listSelector">@drawable/list_subject_selector</item>
        <item name="android:cacheColorHint">@android:color/transparent</item>
        <item name="android:background">@drawable/list_subject_selector</item>
    </style>

list_subject_selector ドローアブルは次のとおりです。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- touch down -->
    <item android:drawable="@drawable/list_subject_focused" android:state_pressed="true"/>
    <!-- selected -->
    <item android:drawable="@drawable/list_subject_unfocused" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
</selector>

なぜこれが起こっているのかわかりません... Android ICSでテストしています。

何か案は?

みんなありがとう、フェリペ

更新 1 これは ListFragment コードです。

public class MyFragment extends ListFragment {
    private ListAdaptor adapter;
    private InternalDB db;
    Context mContext;

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

        mContext = getActivity();
        db = new InternalDB(getActivity());
    }

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

        ArrayList<EventVO> listVO = db.getSummaryEvents(true);
        adapter = new ListAdaptor(mContext, R.layout.event_inflate, listVO);
        setListAdapter(adapter);            
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout rl = (LinearLayout) inflater.inflate(R.layout.general_list, container, false);
        return rl;
    }

    private class ListAdaptor extends ArrayAdapter<EventVO> {
        private ArrayList<EventVO> listVO;

        public ListAdaptor(Context context, int textViewResourceId, ArrayList<EventVO> items) {
            super(context, textViewResourceId, items);
            this.listVO = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                v = ViewGroup.inflate(getContext(), R.layout.event_inflate, null);
            }
            final EventVO o = listVO.get(position);
            TextView fullName = (TextView) v.findViewById(R.id.textViewName);
            fullName.setText(o.getUserName());

            //removed part of the code for brevity

            v.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    Intent i = new Intent(mContext, EventDetailsActivity.class);
                    i.putExtra("USER_ID", o.getUserId());                       
                    startActivity(i);
                }
            });
            return v;
        }
    }
}

更新 2 動作するようになりました! それはとても迷惑でした。これを機能させるために私がしたこと:

膨らませるために使用していたxmlファイルには次のものがありました。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true" >

私は次のように変更しました:

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

しかし、実際に変更を加えたのはこれだと思います: onActivityCreated() の内部

list = getListView();
        list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                ListAdaptor la = (ListAdaptor)arg0.getAdapter();
                EventVO vo = la.getItem(arg2);
                Intent i = new Intent(mContext, EventDetailsActivity.class);
                i.putExtra("USER_ID", vo.getUserId());
                i.putExtra("IS_BORROWED", true);
                startActivity(i);
            }

重要なのはlist = getListView();という行です。 このコードで ListView を取得していませんでした。onCreateView() メソッドで、findViewById を使用して listView を取得していました。私は実際の ListView オブジェクトとのリンクを失っていたと思います。

私を助けてくれたみんなに感謝します!:)

フェリペ});

4

2 に答える 2

2

リストセレクターを変更してみてください。現在、2 番目のドローアブルは、ListView 内のアイテムがフォーカスされていないか、押されいない状態で選択されている場合にのみ使用されます。セレクターをどのように見せたいのかよくわかりませんが"@drawable/list_selector_unfocused"、リストセレクターを通常どおりに見せたい場合は、他のすべての属性を削除してください。つまり、アイテムが押されたときにのみ"@drawable/list_selector_focused"使用されます。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- touch down -->
<item android:drawable="@drawable/list_subject_focused" android:state_pressed="true"/>
<!-- selected -->
<item android:drawable="@drawable/list_subject_unfocused" />

于 2012-05-28T16:27:57.237 に答える
1

純粋なListViews にレイアウトを追加していると、バックグラウンドで提供されていた古いものなどの多くの景品が失われることがわかりました。純粋なを使用するのをやめて を使用するように変更することをお勧めします。そうすれば、セレクター ドローアブルをいじる必要なく、すべての素晴らしさが戻ってくるのを見ることができます。 FragmentListActivityFragmentListFragment

アプリケーションの「Swell」タブと「Tide」タブはどちらも 内の ListFragments であり、次のように表示されViewPagerます。

強調表示されたページャー内の ListFragment (元の ICS は、ここに示されているよりも少し暗いです)

于 2012-05-28T15:25:23.440 に答える