Как исправить фрагмент, не запуская проблему? - PullRequest
1 голос
/ 21 сентября 2011

Я запускаю мероприятие, в котором размещается фрагмент со списком элементов.

При нажатии на элемент.Макет проверен на трехпанельный режим или нет.

    public void onFeedSelected(Feed feed) {
    if (isThreePane) {
        addItemsFragment(feed);
    }
    else {
        Intent i=new Intent(this, ItemsActivity.class);

        i.putExtra(ItemsActivity.EXTRA_FEED_KEY, feed.getKey());

        startActivity(i);
    }
}

Как вы можете видеть, если это не трехпанельный режим, он запускает действие. Это нормально работает на обычных телефонах.

Но еслиэто экран планшета, действие не запускается во фрагменте.

Вот мой метод AddFeed ().

public void addItemsFragment(Feed feed) {
    FragmentManager fragMgr=getSupportFragmentManager();
    ItemsFragment items=(ItemsFragment)fragMgr.findFragmentById(R.id.second_pane);
    FragmentTransaction xaction=fragMgr.beginTransaction();

    if (items==null) {
        items=new ItemsFragment(true);
        items.setOnItemListener(this);

        xaction
            .add(R.id.second_pane, items)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .addToBackStack(null)
            .commit();
    }
    else {
        ContentFragment content=
            (ContentFragment)fragMgr.findFragmentById(R.id.third_pane);

        if (content!=null) {
            xaction.remove(content).commit();
            fragMgr.popBackStack();
        }
    }

Я не понимаю, почему он не запускается .. Когда я нажимаю напункт он ничего не делает на планшетном устройстве.

РЕДАКТИРОВАТЬ:

private boolean isThreePane=false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    FeedsFragment feeds
        =(FeedsFragment)getSupportFragmentManager()
                                                    .findFragmentById(R.id.feeds);

    feeds.setOnFeedListener(this);

    isThreePane=(null!=findViewById(R.id.second_pane));

    if (isThreePane) {
        feeds.enablePersistentSelection();
    }
}

1 Ответ

0 голосов
/ 21 сентября 2011

Я совсем не знаком с Fragment API, так что это полный выстрел в темноте ...

isThreePane=(null!=findViewById(R.id.second_pane));

получает значение true на планшете, что означает, что findViewById(R.id.second_pane) невозвращая ноль.У вас есть это представление second_pane, жестко запрограммированное в вашем xml?Как приложение решает, должно ли присутствовать представление second_pane?Это вообще зависит от размера экрана?

Если вы используете что-то вроде этого:

fragMgr.findFragmentById(R.id.second_pane);

Вместо findViewById?Опять же, я ничего не знаю о фрагментах API, извините, если это глупый вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...