2016-07-24 48 views
0

片段1片段之間切換:如何使用按鈕

public class homePage extends Fragment { 


private OnFragmentInteractionListener mListener; 
private View view; 

public homePage() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_home_page, container, false); 
    Button btnLogin = (Button) view.findViewById(R.id.login); 
    Button btnRegister = (Button) view.findViewById(R.id.register); 
    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      loginView(); 
     } 
    }); 
    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      registerView(); 
     } 
    }); 
    return view; 
} 


public static homePage newInstance() { 
    homePage fragment = new homePage(); 
    Bundle args = new Bundle(); 
    return fragment; 
} 


public void registerView(){} 
public void loginView(){} 


public interface OnFragmentInteractionListener { 

} 
} 

Acitivty:

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     homePage homepage = new homePage(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, homepage) 
        .commit(); 
     } 
    } 




} 

我的片段1與編號的 「登錄」 和 「註冊」 兩個按鈕。每當登錄被點擊時,我想要去我的fragment_login.xml,當點擊註冊時,我想要去我的fragment_register.xml。我應該在我的活動還是在我的片段中創建這些功能?我該怎麼做?我對android非常陌生,我正在努力學習這些基本的東西。感謝您的幫助:(

登錄環境:「com.example.hoofdgebruiker.winkelskortrijk.login」 註冊背景:「com.example.hoofdgebruiker.winkelskortrijk.register」

回答

1

你必須讓之間的通信通過InterfaceFragment對象。

的活動,讓您的片段之間的切換需要實現的是Interface

所以,你的情況你的類必須定義如下。這是你的Interface,它可以幫助你,告訴你的活動,一個按鈕被點擊您Fragment內:

public interface HomeClickListener { 
    void onLoginClick(); 
    void onRegisterClick(); 
} 

你的活動需要實現以上述接口當按鈕被點擊通知:

public class HomeActivity extends Activity implements HomeClickListener { 

    void onLoginClick() { 
     // Your activity code to replace your current Fragment with your Login fragment 
    } 

    void onRegisterClick() { 
     // Your activity code to replace your current Fragment with your Register fragment 
    } 

} 

您的片段通過活動主辦,所以你需要有對它的引用,並通過Interface通知它:

public class LoginFragment extends Fragment { 

    final HomeClickListener homeClickListener 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      homeClickListener = (homeClickListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.fragment_home_page, container, false); 
     Button btnLogin = (Button) view.findViewById(R.id.login); 
     Button btnRegister = (Button) view.findViewById(R.id.register); 
     btnLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       homeClickListener.onLoginClick(); 
      } 
     }); 
     btnLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       homeClickListener.onRegisterClick(); 
      } 
     }); 
     return view; 
    } 

} 

更多信息here