2011-05-19 75 views
1

在我的应用程序中,我有一个导航菜单,它在活动之间是不变的。为了使我的代码更容易修改,我将它制作成了它自己的xml,并且已经为我的每个屏幕导入了我的布局。从XML中获取视图

要设置按钮我做了一个类,我通过我当前的活动。新类没有问题找到按钮的视图,但找不到菜单的封装布局,并在尝试findViewById()时返回null。由于按键和布局在同一个XML

public static void setup(Activity a){ 
    myActivity = a; 

    //OFFENDING BIT OF CODE 
    View myLayout = (View) myActivity.findViewById(R.layout.navigation_bar); 

    Log.d(TAG, "layout: "+myLayout); 

    set_btn = (ImageButton) myActivity.findViewById(R.id.a_settings); 
    set_btn.setPressed(false); 
    set_btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //TODO: 
     } 
    }); 

    inbox_btn = (ImageButton) myActivity.findViewById(R.id.a_offers); 
    inbox_btn.setPressed(false); 
    inbox_btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //TODO: 
     } 
    }); 

} 

主屏XML

<RelativeLayout android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/navigationBar" 
    android:layout_alignParentBottom="true"> 
    <include android:layout_height="wrap_content" 
     android:id="@+id/include1" 
     layout="@layout/navigation_bar" 
     android:layout_width="wrap_content"></include> 
</RelativeLayout> 

菜单XML

<RelativeLayout mlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/NavigationLayout"> 

    <RelativeLayout android:id="@+id/buttonLayout" 
     android:layout_height="75dip" 
     android:layout_width="fill_parent" 
     android:layout_alignParentBottom="true"> 

     <ImageButton android:id="@+id/a_settings" 
      android:layout_width="100dip" 
      android:background="@drawable/settings_button" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_height="fill_parent" 
      android:scaleType="fitXY"> 
     </ImageButton> 

     <ImageButton android:id="@+id/a_wallet" 
      android:layout_width="100dip" 
      android:background="@drawable/wallet_button" 
      android:layout_toLeftOf="@+id/a_settings" 
      android:layout_alignBottom="@+id/a_settings" 
      android:layout_height="fill_parent" 
      android:scaleType="fitXY"> 
     </ImageButton> 

     <ImageButton android:id="@+id/a_offers" 
      android:layout_width="100dip" 
      android:background="@drawable/offers_button" 
      android:layout_toRightOf="@+id/a_settings" 
      android:layout_alignBottom="@+id/a_settings" 
      android:layout_height="fill_parent" 
      android:scaleType="fitXY"> 
     </ImageButton> 

    </RelativeLayout> 

</RelativeLayout> 

回答

2

即使你的菜单布局确实叫navigation_bar,你给你的包括菜单布局的include1的ID - >android:id="@+id/include1"。如果你想在你的活动中解决它(或者试图找到ImageButtons,它们也可见),请尝试findViewById(R.id.include1)

1

我不是100%,但我会去上肢体并说你可能需要从你的myLayout视图中调用findViewById()(它也可能存在转换问题)。

所以这个代替:

public static void setup(Activity a){ 
    myActivity = a; 

    //OFFENDING BIT OF CODE 
    myLayout = (View) myActivity.findViewById(R.layout.navigation_bar); 

    Log.d(TAG, "layout: "+myLayout); 

    set_btn = (ImageButton) myLayout.findViewById(R.id.a_settings); 
    set_btn.setPressed(false); 
    set_btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //TODO: 
     } 
    }); 

    inbox_btn = (ImageButton) myLayout.findViewById(R.id.a_offers); 
    inbox_btn.setPressed(false); 
    inbox_btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //TODO: 
     } 
    }); 

}