ImageView选中状态不显示。

6
在我的应用程序中,我有一个活动(HomeActivity)和3个片段(因此我有3个按钮)。在HomeActivity中,我有几个按钮,点击后应该更改其状态。当第一次运行应用程序时,我按下其中一个按钮后,所选状态已更改(在我的情况下是从白色到绿色),但是当我按下另一个按钮时,所有按钮都会变为未选择状态(所有按钮都是白色)。请问这里的问题是什么?
public class HomeActivity implements View.OnClickListener {

    private ImageView mMessageButton;
    private ImageView mMapButton;
    private ImageView mSettingsButton;
    private int mCurrentFragmentId = DISCOUNT;
    public List<ImageView> mPageItems;
    public int mSelectedPage = 0;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        init();
    }
    private void init(){      
        mMessageButton = (ImageView)findViewById(R.id.message_icon);
        mMapButton = (ImageView)findViewById(R.id.map_icon);
        mSettingsButton = (ImageView)findViewById(R.id.settings_icon);
    mPageItems = new ArrayList<ImageView>();

        mPageItems.add(mMessageButton);
        mPageItems.add(mMapButton);
        mPageItems.add(mSettingsButton);

        mMessageButton.setOnClickListener(this);
        mMapButton.setOnClickListener(this);
        mSettingsButton.setOnClickListener(this);
    }

    public void addPage(final DefaultHeaderFragment pDefaultFragment, final boolean isAddToBackStack){
        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        mPageItems.get(mSelectedPage).setSelected(true);
        transaction.replace(R.id.f_pager, pDefaultFragment);
        if (isAddToBackStack) transaction.addToBackStack(null);
        transaction.commit();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.message_icon:
                mSelectedPage = 0;
                MessagesFragment messagesFragment = new MessagesFragment(HomeActivity.this);
                Bundle messageArgument = new Bundle();
                messageArgument.putInt("fragmentId", mCurrentFragmentId);
                messagesFragment.setArguments(messageArgument);
                addPage(messagesFragment, true);
                break;
            case R.id.map_icon:
                mSelectedPage = 1;
                YandexMapFragment mapFragment = new YandexMapFragment(HomeActivity.this);
                Bundle mapArgument = new Bundle();
                mapArgument.putInt("fragmentId", mCurrentFragmentId);
                mapFragment.setArguments(mapArgument);
                addPage(mapFragment, true);  
                break;
            case R.id.settings_icon:
                mSelectedPage = 2;
                SettingsFragment settingsFragment = new SettingsFragment(HomeActivity.this);
                Bundle settingsArgument = new Bundle();
                settingsArgument.putInt("fragmentId", mCurrentFragmentId);
                settingsFragment.setArguments(settingsArgument);
                addPage(settingsFragment, true);
                break;
        }
    }
}

home.xml

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true">
        <ImageView
                android:id="@+id/message_icon"
                android:layout_width="wrap_content"
                android:layout_toLeftOf="@+id/map_icon"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/header_margin_between_icons"
                android:layout_centerInParent="true"
                android:src="@drawable/button_indicator_message_button"/>
        <ImageView
                android:id="@id/map_icon"
                android:layout_width="wrap_content"
                android:layout_toLeftOf="@+id/settings_icon"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/header_margin_between_icons"
                android:layout_centerInParent="true"
                android:src="@drawable/button_indicator_map_button"/>
        <ImageView
                android:id="@id/settings_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_marginRight="@dimen/header_marginLeft_marginRight"
                android:layout_alignParentRight="true"
                android:src="@drawable/button_indicator_settings_button"/>
    </RelativeLayout>
 <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id = "@+id/f_pager"/>

</RelativeLayout>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/message_pressed"/>
    <item android:state_selected="true" android:drawable="@drawable/message_pressed"/>
    <item android:drawable="@drawable/message_unpressed"/>
</selector>
1个回答

7

onClick中,你应该调用view.setSelected(true);以强制更改ImageView的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接