2016-06-28 56 views
3

在我的应用程序的主布局中,我有一个搜索任务按钮。现在,当用户单击该按钮时,我想将布局xml文件更改为search_layout.xml。 我不想为搜索任务创建一个新的活动,并且想使用我的activity_main.java类进行编码。那么如何从现有的activity_main.xml中充填search_layout。Android:在同一活动中更改布局

我的activity_main布局是与Collapsing工具栏和Recycler视图协调布局。

在我的search_layout.xml中我有一个简单的相对布局。

那么如何处理呢? 我搜索了这个,但到处都是我如何将视图添加到现有的视图中。但在我的情况下,我想彻底改变看法。

感谢

回答

0

有两种方法可以做到这一点:一个是使框架布局父标签的布局,然后创建两个布局:您已经创建了一个和一个用于框架在它的搜索布局并为搜索布局GONE提供可见性,并且当您单击搜索时,可见度可见。

第二种方法是创建搜索布局新的XML布局文件和夸大它像这样:

View v = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null); 

与此布局的元素将是这样的:

Button button=(Button)v.findviewbyid(R.id.your_button_id); 

更改可视性的观点将有助于你的情况下,你完全想要改变的意见

1

你可以看看this question,但是,这不是一个很好的做法低,你应该考虑使用Fragment或任何其他机制。通过这样做,你可以用搜索逻辑混淆你的Activity的逻辑。

+0

我尝试使用的setContentView但其表现不佳 –

+0

是啊,这就是为什么你应该考虑使用'Fragment's。一种更简单的方法是,当'ActionBar'中的SearchView'被展开时调出搜索'Fragment',当'SearchView'被折叠时关闭它。你可以在你的活动中听到这些[回调](https://developer.android.com/reference/android/widget/SearchView.html#onActionViewExpanded())。 –

1

您只需在按钮的点击侦听器中调用setContentView(R.layout.your_search_layout)即可。

示例 -

yourButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     setContentView(R.layout.your_search_layout); 
    } 
}); 

然而,它始终是很好的做法,使你的代码模块化,因此你应该考虑使用Fragment s到实现这一目标。

0

我觉得在你的情况下,你应该分段处理这种情况。

阅读this了解如何使用FragmentManager替换碎片的更多细节。

Here的关于如何改变片段在android系统一个很好的例子: