2013-08-20 197 views
2

我創建了操作欄自定義視圖:action_bar_bets.xml自定義操作欄項目監聽

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="right" 
    android:weightSum="2" 
    android:orientation="horizontal" > 

    <ImageButton 
     android:id="@+id/actionBarProfile" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingRight="10dp" 
     android:src="@drawable/ic_action_user" /> 

    <ImageButton 
     android:id="@+id/actionBarBets" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingRight="10dp" 
     android:src="@drawable/ic_action_betslip" /> 

</LinearLayout> 

這裏是我的菜單:action_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 


    <item 
     android:id="@+id/mybetsCount" 
     android:actionLayout="@layout/action_bar_bets" 
     android:showAsAction="always"/> 

</menu> 

我創建行動起來吧代碼:

ActionBar actionBar = getActionBar(); 
actionBar.setDisplayShowTitleEnabled(false); 
actionBar.setDisplayUseLogoEnabled(false); 
actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setDisplayShowCustomEnabled(true); 
View view = getLayoutInflater().inflate(R.layout.action_bar_bets, null); 
actionBar.setCustomView(view) 

我試過SE牛逼OnClickListener到ImageButtons:

這樣的:

ImageButton profile = (ImageButton) view.findViewById(R.id.actionBarProfile); 
profile.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(getApplicationContext(), "Profile", Toast.LENGTH_SHORT).show(); 
    } 
}); 

像這樣:

actionBar.getCustomView().setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.actionBarProfile: 
      Toast.makeText(getApplicationContext(), "Profile", Toast.LENGTH_SHORT).show(); 
      break; 
     default: 
      break; 
     } 
    } 
}); 

但沒有發生

你能幫我解決這個問題?

地址 此外,在這個類我有ListNavigation

PackageManager pm = getPackageManager(); 
String label; 
try { 
    ActivityInfo activityInfo = pm.getActivityInfo(getComponentName(), 
      0); 
    label = activityInfo.loadLabel(pm).toString(); 
} catch (NameNotFoundException e) { 
    label = null; 
    e.printStackTrace(); 
} 

String[] navigations = { label, "Sports", "Profile" }; 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
     getBaseContext(), R.layout.custom_spinner_title_bar, 
     android.R.id.text1, navigations); 
adapter.setDropDownViewResource(R.layout.custom_spinner_title_bar); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() { 
     @Override 
    public boolean onNavigationItemSelected(int itemPosition, 
      long itemId) { 
     switch (itemPosition) { 
     case 1: 
      Intent intent = new Intent(getApplicationContext(), 
        MainActivity.class); 
      startActivity(intent); 
      break; 
     case 2: 
      intent = new Intent(getApplicationContext(), 
        Activity_profile.class); 
      startActivity(intent); 
      break; 
     default: 
      break; 
     } 
     return false; 
    } 
}; 
actionBar.setListNavigationCallbacks(adapter, navigationListener); 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.action_bar, menu); 
    return true; 
} 
+1

你有更多的在此提供一個位。一般來說你的代碼似乎是正確的。當你使用像「什麼都沒有發生」這樣空的短語時,你的大腦應該總是觸發你可以用像.....CATCAT-stacktrace這樣的內容替換那個空的短語! – bofredo

+0

從未見過,一定要看它上調 – bofredo

+0

我使用OptionMenuWithActivity.class此代碼。我的其他課程擴展了這個類。 我使用Log onTouch方法之前,但它也清楚。看來,這個ID是不正確的 – WOLVERINE

回答

0

我發現在那裏我有錯誤更換

ImageButton profile = (ImageButton) view.findViewById(R.id.actionBarProfile); 

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL); 
actionBar.setCustomView(view, lp); 

,並刪除該代碼:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.action_bar, menu); 
    return true; 
} 

我的導航列表重疊的按鈕

謝謝大家的幫助

0

嘗試ontouchlistener爲的ImageButton:

變化

setOnClickListener(new OnClickListener() 

到:

setOnTouchListener(new OnTouchListener() 
+0

什麼也沒有發生 – WOLVERINE

1

林不知道你在哪裏初始化按鈕,但是當它在類似的onCreate(),然後用

ImageButton profile = (ImageButton) findViewById(R.id.actionBarProfile); 
+0

是的,在OptionMenuWithActivity.class的onCreate()方法中。而我的其他類擴展OptionMenuWithActivity – WOLVERINE

+0

,那麼你不需要視圖參考這裏 – bofredo

+0

我嘗試這一點,但它並沒有幫助 – WOLVERINE

1

試試這個。這是一個開關的例子,但是對於其他組件,這是相同的方式

getMenuInflater().inflate(R.menu.export, menu); 
MenuItem item = menu.findItem(R.id.myswitch); 
Switch switchOnActionBar = (Switch)item.getActionView().findViewById(R.id.switchForActionBar); 
switchOnActionBar.setOnCheckedChangeListener(this); 

SwitchForActionBar在switch_layout中。XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:layout_gravity="center_vertical" 
    android:gravity="center_vertical"> 

    <Switch 
     android:id="@+id/switchForActionBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textOff="Manuel" 
     android:textOn="Auto" 
     android:gravity="center_vertical" 
     android:thumb="@drawable/switch_thumb" 
     android:textColor="@color/white" 
     android:textColorHint="@color/white" 
     android:background="@android:color/transparent" 
     android:layout_marginRight="10dp"/> 

</RelativeLayout> 

這是菜單佈局

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/myswitch" 
     android:title="" 
     android:checkable="true" 
     android:showAsAction="always" 
     android:actionLayout="@layout/switch_layout" 
     /> 
</menu>