我现在一直在寻找解决方案几天,但我仍在抓我的。我有一个活动,发起3个片段,每个片段是遥控器的一部分。因此每个片段上有许多按钮。我需要做的是能够获得有关哪个按钮被推回活动的信息,以便它可以对信息做些什么。我看到侦听器/接口方法是正确的方法,但我发现的所有示例都使用Listview,您只需要设置一次侦听器。我为遥控器上的每个按钮都有多个onClick侦听器。
以下是如何宣布法令:
public class RemoteFragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = null;
String message = getArguments().getString(EXTRA_MESSAGE);
if ( message.equals( "main") ) {
v = createViewMain( inflater, container, savedInstanceState );
}
else if ( message.equals("control") ) {
v = createViewControl( inflater, container, savedInstanceState );
}
else if ( message.equals("numeric") ) {
v = createViewNumeric( inflater, container, savedInstanceState );
}
return v;
}
private View createViewMain (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.remote_main, container, false);
Button roomOffButton = (Button) v.findViewById(R.id.room_off);
roomOffButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
OnButtonPushed( v);
Toast.makeText(getActivity().getApplicationContext(), "Room Off pressed", Toast.LENGTH_SHORT ).show();
}
});
//....
}
@Override
public void onClickListener( View view ) {
Toast.makeText(getActivity().getApplicationContext(), "Clicked ", Toast.LENGTH_LONG).show();
try{
((OnButtonPushedListener) activity).onButtonPushed(view);
}catch (ClassCastException cce){
}
}
public interface OnButtonPushedListener{
public void onButtonPushed(View view);
}
我在onClickListener的声明中收到错误告诉我必须覆盖或实现超类型方法(我以为我在做)。当我尝试在侦听器中调用onButtonPushed时,它告诉我onButtonPushed(view)未定义为View.OnClickListener类型(我认为当我覆盖它时我正在做的事情。)
回到主要活动,我已宣布
public class RemoteActivity extends FragmentActivity implements RemoteFragment.OnButtonPushedListener {
并已实现接口:
@Override
public void OnButtonPushed(View view ) {
Toast.makeText(this, "in the interface ", Toast.LENGTH_LONG).show();
}
也不是。我敢肯定我一定会错过一些简单的事......我是吗?
非常感谢....
答案 0 :(得分:1)
要从片段调用活动中的方法,请执行以下操作:
((MyActivyt)getActivity())myMethod的();
答案 1 :(得分:0)
我认为你应该实现方法onClick()interface View.OnClickListener:
@Override
public void onClick(View v) {
}