2013-07-13 2 views
4

В моем приложении у меня есть одно действие (HomeActivity) и 3 фрагмента (у меня есть 3 кнопки). В HomeActivity у меня есть кнопки, которые должны были изменить его состояние после нажатия на него. При первом запуске приложения я нажимаю одну из этой кнопки, выбранное состояние изменено (в моем случае от белого до зеленого), но когда я нажимаю другую кнопку, все кнопки становятся недоступными (все кнопки белые). Может ли кто-нибудь сказать мне, в чем проблема?imageView выбранное состояние не отображается

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> 

ответ

4

внутри onClick вы должны вызвать view.setSelected(true); для того, чтобы заставить содержание ImageView изменить

Смежные вопросы