【问题标题】:Fragment to fragment inner communication片段到片段内部通信
【发布时间】:2014-04-30 12:25:01
【问题描述】:

如何使用片段来实现这一点

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

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

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

} 

【问题讨论】:

标签: android android-fragments interface fragment


【解决方案1】:

您没有正确使用片段,请查看 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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多