Java 在片段中有按钮操作,而不是主按钮
我有一个安卓应用程序,我使用带有ActionBarSherlock的标签。因此,我的主要活动为我创建选项卡,并从中加载片段布局 在my MainActivity.java中,我创建了一个选项卡,这只是一个片段:Java 在片段中有按钮操作,而不是主按钮,java,android,Java,Android,我有一个安卓应用程序,我使用带有ActionBarSherlock的标签。因此,我的主要活动为我创建选项卡,并从中加载片段布局 在my MainActivity.java中,我创建了一个选项卡,这只是一个片段: mTabsAdapter = new TabsAdapter(this, mViewPager); mTabsAdapter.addTab( bar.newTab().setText("Fragment 1"), MainMenuFragment.class, null
mTabsAdapter = new TabsAdapter(this, mViewPager);
mTabsAdapter.addTab(
bar.newTab().setText("Fragment 1"),
MainMenuFragment.class, null);
My MainMenu.java如下所示:
public class MainMenuFragment extends SherlockFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.mainmenu_fragment, container, false);
return view;
}
public void showMainMenu(View view)
{
Log.e("app", "olol: button!"); // never called!!
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.scan_fragment, container, false);
Button menuButton = (Button)view.findViewById(R.id.btnMenu);
menuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("app", "onclick listener");
}
});
return view;
}
这是主菜单
现在我要做的就是将方法showMainMenuView视图放在某个地方。在我的例子中,我认为这会出现在相应的java文件mainmenuframent.java中。但它只有在我将该方法放入mainavity.java文件时才起作用
这意味着来自各种片段布局的所有按钮操作都将放在一个主java文件中。为什么我不能简单地将它放在调用片段布局的java文件中…?现在我所要做的就是将方法showmain菜单放在某个地方-这是错误的。请参阅以下文件: 例如,如果指定android:onClick=sayHello,则必须声明上下文(通常是活动)的公共void sayHelloView v方法 似乎您无法将回调放在某个地方,因为框架将无法找到该回调。如果您在活动(实际上是一个上下文)中定义它,视图就有可能找到它。实际上,View.java包含以下代码:
case R.styleable.View_onClick:
if (context.isRestricted()) {
throw new IllegalStateException("The android:onClick attribute cannot " + "be used within a restricted context");
}
final String handlerName = a.getString(attr);
mHandler = getContext().getClass().getMethod(handlerName, View.class);
...
mHandler.invoke(getContext(), View.this);
似乎这是使用当前android:onClick属性规范调用布局文件中定义的回调的唯一可能方法。现在我要做的就是将方法ShowMain菜单放在某个地方-这是错误的。请参阅以下文件: 例如,如果指定android:onClick=sayHello,则必须声明上下文(通常是活动)的公共void sayHelloView v方法 似乎您无法将回调放在某个地方,因为框架将无法找到该回调。如果您在活动(实际上是一个上下文)中定义它,视图就有可能找到它。实际上,View.java包含以下代码:
case R.styleable.View_onClick:
if (context.isRestricted()) {
throw new IllegalStateException("The android:onClick attribute cannot " + "be used within a restricted context");
}
final String handlerName = a.getString(attr);
mHandler = getContext().getClass().getMethod(handlerName, View.class);
...
mHandler.invoke(getContext(), View.this);
似乎这是使用当前的android:onClick属性规范调用布局文件中定义的回调的唯一可能的方法。简短的回答如前所述,您不能 唯一的方法是创建一个onClick-偶侦听器。在onCreate方法的MainMenuFragment.java中,执行以下操作:
public class MainMenuFragment extends SherlockFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.mainmenu_fragment, container, false);
return view;
}
public void showMainMenu(View view)
{
Log.e("app", "olol: button!"); // never called!!
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.scan_fragment, container, false);
Button menuButton = (Button)view.findViewById(R.id.btnMenu);
menuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("app", "onclick listener");
}
});
return view;
}
您可以从布局xml中删除onClick属性。简短的回答就像已经指出的那样,您不能 唯一的方法是创建一个onClick-偶侦听器。在onCreate方法的MainMenuFragment.java中,执行以下操作:
public class MainMenuFragment extends SherlockFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.mainmenu_fragment, container, false);
return view;
}
public void showMainMenu(View view)
{
Log.e("app", "olol: button!"); // never called!!
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.scan_fragment, container, false);
Button menuButton = (Button)view.findViewById(R.id.btnMenu);
menuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("app", "onclick listener");
}
});
return view;
}
您可以从布局xml中删除onClick属性。我使用以下方法解决了这个问题: 片段xml包含 安卓:onClick=myFunction 活动包含
public void myFunction(View v)
{ getSupportFragmentManager().findViewById/Tag(...).myFunction(v); }
然后,片段代码可以实现如下,以访问本地数据
public void myFunction(View v) {...}
希望这有帮助。我使用以下方法解决了这个问题: 片段xml包含 安卓:onClick=myFunction 活动包含
public void myFunction(View v)
{ getSupportFragmentManager().findViewById/Tag(...).myFunction(v); }
然后,片段代码可以实现如下,以访问本地数据
public void myFunction(View v) {...}
希望这能有所帮助。我不确定我是否遵守了。我知道该方法必须接收一个视图作为参数。问题是,我只能将onClick方法放在MainActivity.java文件中。但加载片段布局的是MainMenu.java。我只是想知道该文件是否可以处理onClick事件。提供了一些关于实际android视图源的详细信息。答案仍然是一样的——根本无法调用它,因为当前的android代码和活动片段存在根本性差异。请检查片段文档-它与活动不同,也与上下文无关。我不确定是否遵循。我知道该方法必须接收一个视图作为参数。问题是,我只能将onClick方法放在MainActivity.java文件中。但加载片段布局的是MainMenu.java。我只是想知道该文件是否可以处理onClick事件。提供了一些关于实际android视图源的详细信息。答案仍然是一样的——根本无法调用它,因为当前的android代码和活动片段存在根本性差异。请检查片段文档-它与活动不同,也与上下文无关。