片段化内部沟通

时间:2014-04-30 12:25:02

标签: android android-fragments interface fragment

如何使用片段

单击列表项---→点击片段---→另一个片段

我正在使用此代码问题是崩溃的应用程序..

public class HomeFragment extends Fragment implements OnClickListener {
private static final String TAG_FRAGMENT = null;
RelativeLayout Homeremadies;
RelativeLayout HealthyLiving;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_home);
    Homeremadies=(RelativeLayout)findViewById(R.id.rlHome);
    HealthyLiving=(RelativeLayout)findViewById(R.id.Healthyliving);

    Homeremadies.setOnClickListener(this);
    HealthyLiving.setOnClickListener(this);
}

public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v.getId()==R.id.rlHome)
    {

        startActivity(new Intent(v.getContext(),cat_homeremadies.class)); 
    }
    else if (v.getId()==R.id.Healthyliving)
    {
    Toast.makeText(this, "Facebook pressed!", Toast.LENGTH_SHORT).show();   
    }
}

} 

1 个答案:

答案 0 :(得分:0)

你没有正确使用片段,请查看facebook-android-sdk示例代码,它有很好的片段转换演示。

下面是在Android应用程序中实现片段并正确实现片段转换的示例。

<强> MainActivity.java

public class MainActivity extends FragmentActivity {

    private static final String USER_SKIPPED_LOGIN_KEY = "user_skipped_login";

private static final int SPLASH = 0;
private static final int SELECTION = 1;
private static final int SETTINGS = 2;
private static final int FRAGMENT_COUNT = SETTINGS +1;

private Fragment[] fragments = new Fragment[FRAGMENT_COUNT];

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

    FragmentManager fm = getSupportFragmentManager();
    SplashFragment splashFragment = (SplashFragment) fm.findFragmentById(R.id.splashFragment);
    fragments[SPLASH] = splashFragment;
    fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment);
    fragments[SETTINGS] = fm.findFragmentById(R.id.userSettingsFragment);

    FragmentTransaction transaction = fm.beginTransaction();
    for(int i = 0; i < fragments.length; i++) {
        transaction.hide(fragments[i]);
    }
    transaction.commit();
}

public void showSettingsFragment() {
    showFragment(SETTINGS, true);
}

public void showSplashFragment() {
    showFragment(SPLASH, true);
}

   splashFragment.setSkipLoginCallback(new SplashFragment.SkipLoginCallback() {
        @Override
        public void onSkipLoginPressed() {
            userSkippedLogin = true;
            showFragment(SELECTION, false);
        }
    });


private void showFragment(int fragmentIndex, boolean addToBackStack) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    for (int i = 0; i < fragments.length; i++) {
        if (i == fragmentIndex) {
            transaction.show(fragments[i]);
        } else {
            transaction.hide(fragments[i]);
        }
    }
    if (addToBackStack) {
        transaction.addToBackStack(null);
    }
    transaction.commit();
    }
}

SplashFragment.java

public class SplashFragment extends Fragment {

private LoginButton loginButton;
private TextView skipLoginButton;
private SkipLoginCallback skipLoginCallback;
private CallbackManager callbackManager;

public interface SkipLoginCallback {
    void onSkipLoginPressed();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.splash, container, false);

    callbackManager = CallbackManager.Factory.create();
    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends");
    loginButton.setFragment(this);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(getActivity(), "Login successful", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(getActivity(), "Login canceled", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException exception) {
            Toast.makeText(getActivity(), "Login error", Toast.LENGTH_SHORT).show();
        }
    });

    skipLoginButton = (TextView) view.findViewById(R.id.skip_login_button);
    skipLoginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (skipLoginCallback != null) {
                skipLoginCallback.onSkipLoginPressed();
            }
        }
    });

    return view;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

public void setSkipLoginCallback(SkipLoginCallback callback) {
    skipLoginCallback = callback;
}

这些示例使用静态片段加载,而不是动态片段加载,因此细节可能会因动态片段实现而有所不同,但您可以从中获得想法。