在我的应用程序中,我有一个活动(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>
button_indicator_message_button
<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>
答案 0 :(得分:4)
在onClick
内,您应该致电view.setSelected(true);
以强制ImageView
的内容更改