Скажем, у меня есть ListFragment A, который основан на MainActivity A. Пользователь нажимает список из List A и переходит к FragmentActivity B. FragmentActivity содержит 3 вкладки фрагментов.

Итак, я хочу добавить переход к FragmentActivity B, чтобы он вернулся к ListFragment A. Как мне это сделать?

Это моя попытка, пока безуспешно:

public class ItemDetailActivity extends FragmentActivity implements ActionBar.TabListener {
    ...

    actionBar.setDisplayHomeAsUpEnabled(true);

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                LatestFragment fragment = new LatestFragment();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.pager, fragment).addToBackStack(null)
                        .commit();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

LatestFragment - это ListFragment A, к которому я хочу вернуться.

Однако я получил сообщение об ошибке, в котором говорится, что я должен реализовать OnLatestSelectedListener, потому что в LatestFragment я уже поместил интерфейс для передачи значений.

Что еще я могу зайти внутрь onOptionsItemSelected?

1
emen 23 Янв 2014 в 06:23

3 ответа

Лучший ответ

Предполагая, что вы запустили ItemDetailActivity со стандартным намерением, вы должны просто иметь возможность использовать обратное действие следующим образом:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            super.onBackPressed();
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
2
jschweitzer 23 Янв 2014 в 02:44

Я предполагаю, что у вашего FragmentActivityB есть кнопка возврата. если нет, ты можешь получить это

getActionBar().setDisplayHomeAsUpEnabled(true);
<meta-data android:name="android.support.PARENT_ACTIVITY"
        android:value="#######" />

Теперь вы можете просто идентифицировать фрагменты, основанные на MainActivity, используя некоторые флаги, такие как ViewNumber (1,2,3) .

Реализуйте метод onMenuItemSelected (....) и передайте viewNumber , т.е. Фрагмент, который вы хотите показать.

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
      //We are implementing this method to respond to the back button on the action bar.

      int itemId = item.getItemId();
        switch (itemId) {
        case android.R.id.home:

            Intent i = new Intent(this,MainActivity.class);
            i.putExtra("viewNumber",2);
            startActivity(i);
            break;
        }
        return true;
    }//onMenuItemSelected

В MainActivity получите viewNumber с помощью Bundles , и у вас может быть какой-нибудь метод, подобный этому, для работы и отображения желаемого фрагмента.

private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {

    case 1:
        fragment = new ListFragmentB();
        break;
    case 2:
        fragment = new ListFragmentA();
        break;

    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
            }
        }
       }

Надеюсь, это решит вашу проблему.

1
NarendraSoni 23 Янв 2014 в 03:04

Если фрагмент A находится в вашем основном действии, вы также можете использовать ActionBar. Кнопка «Назад» переводит вас к основному действию. Это тоже довольно легко реализовать.

1
android_dev_ 23 Янв 2014 в 02:39