Android 单击按钮时隐藏布局

Android 单击按钮时隐藏布局,android,Android,如何在单击按钮时隐藏布局。下面是我的布局。单击搜索按钮后,我需要隐藏主布局并显示搜索布局,反之亦然 <com.bibliotheque.android.view.viewgroup.FlyOutContainer xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main" android:layout_width="match_parent" android:la

如何在单击按钮时隐藏布局。下面是我的布局。单击搜索按钮后,我需要隐藏主布局并显示搜索布局,反之亦然

<com.bibliotheque.android.view.viewgroup.FlyOutContainer xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#444488"
        android:orientation="vertical" >

        <Button
            android:id="@+id/home_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="@string/home_btn_label" />

        <Button
            android:id="@+id/search_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="@string/search_btn_label" />

        <Button
            android:id="@+id/mybooks_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="@string/mybooks_btn_label" />

        <Button
            android:id="@+id/contact_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="@string/contact_btn_label" />

        <Button
            android:id="@+id/about_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toggleMenu"
            android:text="@string/about_btn_label" />

    </LinearLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:background="#888888"
        android:orientation="vertical" >

        <LinearLayout

            android:id="@+id/home"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:background="#888888"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hello_world"
                android:textAppearance="?android:attr/textAppearanceLarge" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/search_layout"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:background="#888888"
            android:orientation="vertical" >

            <EditText
                android:id="@+id/searchInput"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top"
                android:inputType="text" />

            <ListView
                android:id="@+id/bookList"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />           

        </LinearLayout>

    </LinearLayout>

</com.bibliotheque.android.view.viewgroup.FlyOutContainer>

我试了如下

public class MainActivity extends Activity implements SimpleGestureListener{
    private SimpleGestureFilter detector;
    FlyOutContainer root;
    private ListView lv;
    Button home,search,mybooks,contact,about;
    View home_layout,search_layout,mybooks_layout,contact_layout,about_layout;
    // Listview Adapter
    ArrayAdapter<String> adapter;
    EditText inputSearch;
    ViewGroup content;
    ArrayList<HashMap<String, String>> productList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);
        home=(Button)findViewById(R.id.home_btn);
        search=(Button)findViewById(R.id.search_btn);
        mybooks=(Button)findViewById(R.id.mybooks_btn);
        contact=(Button)findViewById(R.id.contact_btn);
        about=(Button)findViewById(R.id.about_btn);

        home_layout=findViewById(R.id.home);
        search_layout=findViewById(R.id.search_layout);
        //mybooks_layout=(LinearLayout)findViewById(R.id.mybooks_layout);
        //contact_layout=(LinearLayout)findViewById(R.id.contact_layout);
        //about_layout=(LinearLayout)findViewById(R.id.about_layout);


        detector = new SimpleGestureFilter(this,this);
        this.root = (FlyOutContainer) this.getLayoutInflater().inflate(R.layout.activity_sample, null);
        this.setContentView(root);
        inputSearch=(EditText)findViewById(R.id.searchInput);
        lv=(ListView)findViewById(R.id.bookList);

        String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
                "iPhone 4S", "Samsung Galaxy Note 800",
                "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
        adapter = new ArrayAdapter<String>(this, R.layout.book_list_item, R.id.book_item, products);

        lv.setAdapter(adapter); 
        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                MainActivity.this.adapter.getFilter().filter(cs);   
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub                          
            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.sample, menu);
        return true;
    }

    public void toggleMenu(View v){
        Log.i("Toggle method", "Toggle Method");
        home_layout.setVisibility(View.GONE); // not working
        this.root.toggleMenu();
    }
    public enum MenuState {
        CLOSED, OPEN, CLOSING, OPENING
    };
    @Override
    public void onSwipe(int direction) {

        switch (direction) {

          case SimpleGestureFilter.SWIPE_RIGHT : 
              if(this.root.menuCurrentState==com.bibliotheque.android.view.viewgroup.FlyOutContainer.MenuState.CLOSED){
                  try{

                         this.root.toggleMenu();  
                     }catch(Exception e){
                         Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
                     }  
              }
          break;
          case SimpleGestureFilter.SWIPE_LEFT : 
              if(this.root.menuCurrentState==com.bibliotheque.android.view.viewgroup.FlyOutContainer.MenuState.OPEN){
                 try{
                     this.root.toggleMenu();  
                 }catch(Exception e){
                     //Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
                 }
              }

          break;
          case SimpleGestureFilter.SWIPE_DOWN :  
                                                         break;
          case SimpleGestureFilter.SWIPE_UP :    
                                                         break;

          } 
           //Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
        // TODO Auto-generated method stub

    }
    @Override
     public boolean dispatchTouchEvent(MotionEvent me){ 
           this.detector.onTouchEvent(me);
          return super.dispatchTouchEvent(me); 
         }
    @Override
    public void onDoubleTap() {
        // TODO Auto-generated method stub

    }

}
public类MainActivity扩展活动实现SimpleGetStureListener{
专用单纯形滤波器检测器;
飞出容器根;
私有ListView lv;
按钮主页、搜索、mybooks、联系人、关于;
查看主页布局、搜索布局、mybooks布局、contact布局、about布局;
//列表视图适配器
阵列适配器;
编辑文本输入搜索;
视图组内容;
ArrayList产品列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_示例);
主页=(按钮)findViewById(R.id.home\u btn);
搜索=(按钮)findviewbyd(R.id.search\u btn);
mybooks=(按钮)findViewById(R.id.mybooks\u btn);
联系人=(按钮)findViewById(R.id.contact\u btn);
about=(按钮)findviewbyd(R.id.about_btn);
主页布局=findViewById(R.id.home);
search\u layout=findviewbyd(R.id.search\u layout);
//mybooks\u布局=(LinearLayout)findViewById(R.id.mybooks\u布局);
//联系人布局=(线性布局)findViewById(R.id.contact\u布局);
//about_layout=(LinearLayout)findViewById(R.id.about_layout);
检测器=新的SimpleGestureFilter(这个,这个);
this.root=(弹出式容器)this.getLayoutFlater().inflate(R.layout.activity\u示例,null);
此.setContentView(根目录);
inputSearch=(EditText)findViewById(R.id.searchInput);
lv=(ListView)findViewById(R.id.bookList);
字符串产品[]={“戴尔Inspiron”、“HTC One X”、“HTC Wildfire S”、“HTC Sense”、“HTC Sensation XE”,
“iPhone 4S”、“三星Galaxy Note 800”,
“三星Galaxy S3”、“MacBook Air”、“MacMini”、“MacBook Pro”};
适配器=新阵列适配器(此,R.layout.book\u列表项,R.id.book\u项,产品);
低压设置适配器(适配器);
inputSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3){
//当用户更改文本时
MainActivity.this.adapter.getFilter().filter(cs);
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.sample,menu);
返回true;
}
公共无效切换菜单(视图v){
Log.i(“切换方法”、“切换方法”);
home_layout.setVisibility(View.GONE);//不工作
this.root.toggleMenu();
}
公共枚举菜单{
关,开,关,开
};
@凌驾
公共空间(内部方向){
开关(方向){
case SimpleGestureFilter.swip_RIGHT:
if(this.root.menuCurrentState==com.bibliothequeue.android.view.viewgroup.FlyOutContainer.MenuState.CLOSED){
试一试{
this.root.toggleMenu();
}捕获(例外e){
Toast.makeText(例如toString(),Toast.LENGTH_LONG).show();
}  
}
打破
case SimpleGestureFilter.swip_LEFT:
if(this.root.menuCurrentState==com.bibliothequeue.android.view.viewgroup.FlyOutContainer.MenuState.OPEN){
试一试{
this.root.toggleMenu();
}捕获(例外e){
//Toast.makeText(例如toString(),Toast.LENGTH_LONG).show();
}
}
打破
case SimpleGestureFilter.swip_向下:
打破
case SimpleGestureFilter.swip_UP:
打破
} 
//Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
//TODO自动生成的方法存根
}
@凌驾
公共布尔dispatchTouchEvent(MotionEvent me){
本.探测器.本体通风口(me);
返回super.dispatchTouchEvent(me);
}
@凌驾
公共空间{
//TODO自动生成的方法存根
}
}
toggleMenu方法中的setVisibility(View.GONE)从未被调用或不起作用。怎么可能 我隐藏那个布局


我正在我的另一个基本应用程序中尝试相同的代码,它工作正常,但在这里不起作用。:(我无法解决问题。请帮助我解决。

您没有告诉布局随以下内容消失:

home.setVisibility(View.GONE);//not working
而是以下引用的按钮:

home=(Button)findViewById(R.id.home_btn);

不确定为什么要使用布局隐藏/显示而不是对话框(假设您希望打开搜索框以键入搜索条件),但无论如何,只需尝试快速基本按钮单击->切换布局即可

主页是需要在加载活动中显示的标准布局。 new_ly是您希望加载的新布局。默认情况下,将其设置为隐藏

private void ChangeLayout(){
    LinearLayout home_ly = (LinearLayout)findViewById(R.id.home_layout);
    LinearLayout new_ly = (LinearLayout)findViewById(R.id.new_layout);
    if(home_ly.getVisibility() == View.VISIBLE && new_ly.getVisibility() == View.INVISIBLE){
        home_ly.setVisibility(View.INVISIBLE);
        new_ly.setVisibility(View.VISIBLE);
    }
    else if(home_ly.getVisibility() == View.INVISIBLE && new_ly.getVisibility() == View.VISIBLE){
        home_ly.setVisibility(View.VISIBLE);
        new_ly.setVisibility(View.INVISIBLE);
    }
    else{
        home_ly.setVisibility(View.VISIBLE);
        new_ly.setVisibility(View.INVISIBLE);
    }
    }
这将进入oncreate:

Button btn = (Button)findViewById(R.id.change);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ChangeLayout();

            }
        });

主布局正在消失吗?请尝试使视图可见或不可见,而不是布局。@Biplab尝试了这两种方法,但都没有发生任何事情实际调用了
onClick()
方法?请通过调试验证