2016-06-08 1 views
0

다른 탭의 데이터를 분류하기 위해 ActionBar Tab Fragment를 사용하는 애플리케이션이 있습니다. 주 활동 (탭 활동)에서 단추를 누를 때 Tab Fragment에서 메소드를 호출해야합니다. 내가 온 클릭에서) 방법을 NetworkFragmentTab의을 유효성 검사를 (전화를 좋아메소드를 호출하는 방법은 ActionBar Tab에 있습니다. 주요 활동의 일부분

public class NetworkFragmentTab extends Fragment { 
View rootView; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.network_layout, container, false); 
    return rootView; 
} 

public boolean Validate(){ 
    EditText etIpAddress = (EditText)rootView.findViewById(R.id.cd_ip_address); 
    Toast.makeText(getActivity(), etIpAddress.getText().toString(), Toast.LENGTH_LONG).show(); 
    return true; 
} 
} 

NetworkFragment 코드

카메라 세부 활동 아래

public class CameraDetails extends Activity { 
ActionBar.Tab networkTab, userTab; 
Fragment networkFragmentTab = new NetworkFragmentTab(); 
Fragment userFragmentTab = new UserFragmentTab(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.cameradetails); 

    // Asking for the default ActionBar element that our platform supports. 
    ActionBar actionBar = getActionBar(); 

    // Screen handling while hiding ActionBar icon. 
    actionBar.setDisplayShowHomeEnabled(false); 

    // Screen handling while hiding Actionbar title. 
    actionBar.setDisplayShowTitleEnabled(false); 

    // Creating ActionBar tabs. 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Setting custom tab icons. 
    networkTab = actionBar.newTab().setText("Network"); //.setIcon(R.drawable.bmw_logo); 
    userTab = actionBar.newTab().setText("User Account"); 

    // Setting tab listeners. 
    networkTab.setTabListener(new TabListener(networkFragmentTab)); 
    userTab.setTabListener(new TabListener(userFragmentTab)); 

    // Adding tabs to the ActionBar. 
    actionBar.addTab(networkTab); 
    actionBar.addTab(userTab); 

    actionBar.setSelectedNavigationItem(1); 
    } 

public void onClick(View v){ 
    // call method validate from NetworkFragment like networkfragment.validate(); 
    } 
} 
} 

을 시도했다.

+0

당신이 오류를 가지고 있습니까? –

+0

@SathishKumarJ 위의 onClick 코드는 각 탭 이름 만 표시합니다. 내 편집 된 질문을 참조하십시오 – Riskhan

답변

1

Interface을 통해 콜백 코드를 사용해보십시오. Interface을 만들어야하고 InterfaceActivity에서 Fragment이라는 메서드를 호출하는 데 사용할 수있는 하나의 메서드가 있습니다. 아래의 코드 접근법을 시도하면 문제가 해결됩니다.

class MyActivity extends Activity { 
    private MyInterface mInterface; 

    public interface MyInterface { 
     void theMethodOfInterface(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.cameradetails); 
    ... 
    } 

    public void onClick(View v) { 
    mInterface.theMethodOfInterface(); 
    } 

    public void setMyListener(MyInterface listner) { 
    this.mInterface = listener; 
    } 
} 

조각

은 다음과 같습니다 :

class MyFragment extends Fragment implements MyInterface { 
    ... 

     @Override 
    public void onCreateView(Bundle savedInstanceState) { 
    ...// your code 
    ((MyActivity)getActivity()).setMyListener(this); 
    ...// your code 
    } 

    public void someMethodOfFragment() { 
     ... 
     // your code for method of fragment here 
    } 

    @Override 
    public void theMethodOfInterface() { 
     someMethodOfFragment(); 
    } 

} 
+0

안녕하세요. ** MyListener **는 어디에 있습니까? – Riskhan

+0

OK 친구. 어떻게 여러 조각에서 메서드를 호출하기위한 인터페이스를 재 설계 할 수 있습니다. ** userFragmentTab ** – Riskhan

+0

에서 메서드를 호출한다고 가정 해 보겠습니다. Activity에서 Fragment 메서드를 호출하는 예제를 제공했습니다. 이것은 –

1

전통적인 방법은 Activity에서 콜백 인터페이스를 선언하고 Fragment에서이를 구현 한 다음 함께 연결하는 것입니다. 지침은 다음과 같습니다 https://developer.android.com/guide/components/fragments.html#EventCallbacks.

더 좋은 방법은 메시지 버스와 같은 것을 사용하여 조각과 활동 간의 강한 의존성을 제거하는 것입니다. 이것에 관해 말하는 많은 기사가 있습니다.

응용 프로그램을보다 잘 구조화하고 UI stuffs의 통신에서 두통을 제거하려면 Model-View-Presenter 프레임 워크를 채택하는 것이 좋습니다. 다음은 예입니다. http://robo-creative.github.io/mvp.

+0

탭 작업 – Riskhan

+0

에서 탭 단편에 메소드가 존재 함을 호출하려는 경우 활동에 콜백 인터페이스를 선언하고 해당 인터페이스를 구현하도록 할 수 있습니까? – Robo

관련 문제