java - 从具有值的 fragment B 返回到 fragment A

标签 java android android-fragments

我知道有很多关于这个的线索,但我似乎无法真正理解如何解决它。我基本上尝试做的是在 fragment B 中单击按钮后我想返回到 fragment A 和id 值..
因此,在我的 BackStack 中,您转到 Fragment A,然后转到 Fragment B,当按下按钮时,我想返回到 Fragment A 并显示一个值。这是我在 fragment B 中的 onClick 监听器:

//Fragment B which i called from Fragment A
addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(value.getText().toString().trim().length() != 0) {
                 String order = value.getText().toString(); //The value i want in Fragment B
                 //return to Fragment A
            }
}

在我的 MainActivity 中,我像这样处理我的 fragment :

//fragmentManager is initialized in onCreate()
...
private void selectItem(int position) {

    Fragment fragment = null;
    String fTag = null;

    switch (position) {
        case 0:
            fragment = new FragmentA();
            fTag = "fragmentA";
            break;
        case 1:
            fragment = new FragmentC();
            fTag = "fragmentC";
            break;
        case 2:
            fragment = new FragmentD();
            fTag = "fragmentD";
            break;

        default:
            break;
    }

    if (fragment != null) {
        if(replaceFragments(fragment, fTag)) {
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(mNavigationDrawerItemTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        }
    } else {
        Log.e(LOGTAG, "Error in creating fragment");
    }
}

public boolean replaceFragments(Fragment fragment, String fTag) {
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment, fTag).addToBackStack(fTag).commit();
    return true;
}

@Override
public void onBackPressed() {
    int count = fragmentManager.getBackStackEntryCount();
    if (count == 0) {
        super.onBackPressed();
    } else {
        getSupportFragmentManager().popBackStack();
        //TODO: add app title on count == 1
    }
}

最佳答案

创建接口(interface)ValueChangeListener.java

public interface ValueChangeListener {

    public void onValueChanged(String value);
}

通过接口(interface)传递值:

public class FragmentB extends Fragment {

    private ValueChangeListener valueChangeListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            valueChangeListener = (ValueChangeListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement ValueChangeListener");
        }
    }

    //your code
    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(value.getText().toString().trim().length() != 0) {
                 String order = value.getText().toString();
                 //now the value is in the Activity and you can pass it anywhere you want from there
                 valueChangeListener.onValueChanged(order);
            }
    }

}

实现 Activity 接口(interface):

public class YourActivity extends FragmentActivity implements ValueChangeListener{

    @Override
    public void onValueChanged(String value) {
    //your value is here
    }
}

关于java - 从具有值的 fragment B 返回到 fragment A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898807/

相关文章:

java - 使用显示标签 1.1.1 将数据导出到 Excel 时出错

java - 当我旋转 Android 手机时,Fragment 中的自定义 ListView 就会出现

java - 我的应用程序无法编译,当它抛出错误时,我所有的资源文件都消失了

java - 从缓存中恢复图片时android OutOfMemoryError

java - scala 中 REPL 变量的后增量和预增量未按预期工作

java - 无法使用mockito模拟方法调用

android - ListView setOnClickListener

java - Android 全屏只有一个 Activity ?

android - 如何摆脱 "This app is causing your device to run slowly"通知(应用程序开发时间)?

java - Lucene在java中找不到方法