我是android编程的新手,我正在尝试创建一个简单的按钮,只需点击一下按钮就可以将视图从activity_main_menu.xml切换到info_menu.xml。这里分别是源代码和XML。
MainMenu.java
package us.wi.k12.cadottschools;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
final Button infoButton = (Button) findViewById(R.id.InfoButton);
infoButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v)
{
setContentView(R.layout.info_menu);
};
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
}
avtivity_main_menu.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical"
android:gravity="center" >
<Button android:id="@+id/CalendarButton"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/calendar_button" />
<Button android:id="@+id/InfoButton"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/info_button" />
<Button android:id="@+id/ContactButton"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/contact_button" />
</LinearLayout>
两次运行时都没有抛出任何错误,但是当我点击InfoButton按钮时,没有任何反应。
答案 0 :(得分:1)
虽然可以多次调用setcontentView()
,但不建议这样做。
开始新活动或使用ViewFlipper或ViewSwitcher是更好的解决方案。
顺便说一句,如果再次调用setcontentview(),则使用find
将所有对象再次view.findviewbyid()
。
答案 1 :(得分:1)
将评论转换为答案
;
}
之后您还需要额外onClick()
。所以看起来应该是
infoButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v)
{
setContentView(R.layout.info_menu);
} // sholdn't be one here since its closing a method
});
在一个setContentView()
中多次调用Activity
通常不是一种好习惯。这会导致问题,因为原始View
中的任何layout
都是null
。最好在Activity
内开始新的Fragment
(或使用onClick()
s)。然后在新的Activity
中,在layout
info_menu.xml
setContentView()
的{{1}}内设置Activity
此处onClick()
。
那么你的 infoButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent i = new Intent(v.getContext(), NextActivityName.class);
startActivity(i);
}
});
就像是
{{1}}
答案 2 :(得分:0)
如果您可以开始新的活动来交换视图,则此链接应该会有所帮助:http://developer.android.com/training/basics/firstapp/starting-activity.html
如果您尝试在不启动新活动的情况下交换视图,请将布局xml文件合并到一个文件中。然后在按下按钮之前将要设置的视图的可见性设置为View.VISIBLE,并在按钮按下View.GONE之前设置您不希望看到的视图。然后,一旦按下按钮,将要查看的视图设置为View.VISIBLE,并将您不希望看到的视图设置为View.GONE。
如果您需要代码示例,请与我们联系!
答案 3 :(得分:0)
Fragment
和ViewPager
可能就是您想要的。您可以在其中使用FrameLayout
和多*Layout
,然后更改可见性(不会真正更改视图,但与用户没有区别)
答案 4 :(得分:0)
切换到新视图的推荐方法是启动新活动。但是,如果要通过单击按钮更改现有视图。您可以使用LayoutInflater。
参考 http://www.mysamplecode.com/2011/10/android-dynamic-layout-using-xml-add.html https://justanapplication.wordpress.com/tag/android-view-layoutinflater/
答案 5 :(得分:0)
您只能在Activity中设置一次。如果要切换视图,可以尝试片段: 公共类MainActivity扩展ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
private PlaceholderFragment extends Fragment() {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.info_menu, container, false);
return v;
}
}
}