2014-07-22 10 views
0

저는 며칠 동안 해결책을 찾고 있었지만 아직도 저를 긁어 모았습니다. 나는 세 조각을 발사하는 활동을하고 있는데, 각 조각은 원격 조종의 한 부분이다. 따라서 각 조각에는 많은 버튼이 있습니다. 내가해야 할 일은 어떤 버튼이 활동으로 밀렸는지에 대한 정보를 얻을 수 있도록함으로써 정보로 무엇인가를 할 수 있도록하는 것입니다. 리스너/인터페이스 메소드가 올바른 방법이라는 것을 알았지 만, 필자가 찾은 모든 예제는 리스너를 한 번만 설정해야하는 Listview를 사용합니다. 리모컨의 각 버튼마다 여러 개의 onClick 리스너가 있습니다. 여기조각에서 주요 활동으로 돌아 가기

은의 fragment가 선언하는 방법입니다

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(); 


} 

중 하나를하지 않습니다. 나는 내가 뭔가 간단한 것을 놓치고있을 것임에 틀림 없다라고 확신한다. .. 나는 있냐?

:

@Override 
    public void onClick(View v) { 

    } 
+0

** 정확한 ** 컴파일러 오류를 복사하여 붙여 넣으십시오. 의역문은 종종 우리가 당신을 도울 필요가있는 중요한 정보를 잃어 버립니다. –

답변

0

난 당신이 방법의 onclick() 인터페이스 View.OnClickListener를 구현해야한다고 생각 ((MyActivyt) getActivity()). myMethod();

+0

그게 내가 더 선호하는 것입니다 ... 좀 더 일반적인 목적의 솔루션 인 인터페이스를 구현하십시오. 그러나 나는 무엇을 구현할 것인가/파편에서 오버라이드 할 것인가와 그 활동에서 무엇을 구현할 것인지는 잘 모른다. 이 프래그먼트에는 40 개의 서로 다른 버튼이 있으며 onClick을 사용하여 서로 다른 버튼 프레스를 반환합니다. 어떻게하면 모두 사용할 수있는 단일 방법으로 일반화 할 수 있습니까? – cpeddie

1

이렇게 조각에서 활동의 메소드를 호출하려면 다음

많은 감사합니다 ....

+0

이 방법은 효과가 있지만보다 일반적인 목적의 인터페이스 방법을 구현하는 방법을 알고 싶습니다. – cpeddie

+0

@ user3508881 'MyActivity' 대신 인터페이스로 전송하십시오. –

관련 문제