从片段回传到主要活动

时间:2014-07-22 17:15:46

标签: android android-fragments

我现在一直在寻找解决方案几天,但我仍在抓我的。我有一个活动,发起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();


}

也不是。我敢肯定我一定会错过一些简单的事......我是吗?

非常感谢....

2 个答案:

答案 0 :(得分:1)

要从片段调用活动中的方法,请执行以下操作:

((MyActivyt)getActivity())myMethod的();

答案 1 :(得分:0)

我认为你应该实现方法onClick()interface View.OnClickListener

 @Override
    public void onClick(View v) {

    }