OnItemSelectedListener во фрагменте, использующем пользовательский адаптер

Итак, я играю с этим уже несколько дней и просто не могу заставить его работать. У меня есть действие, которое отображает фрагмент, и этот фрагмент является членом списка фрагментов, которые я просматриваю с помощью ViewPager. Сам фрагмент состоит из TextView и ListView. ListView заполняется из пользовательского адаптера.

Я пытаюсь передать событие OnItemSelected обратно во фрагмент, где оно обрабатывается. Вероятно, для меня лучше просто показать код здесь.

Это деятельность

public class DialogInventory extends FragmentActivity implements OnItemSelectedListener {

ViewPager viewPager;
Pager pager;

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.dialog_inventory);

    List<Fragment> fragList = new Vector<Fragment>();
    fragList.add(Fragment.instantiate(this, FragmentOne.class.getName()));
    fragList.add(Fragment.instantiate(this, FragmentTwo.class.getName()));
    pager = new Pager(getSupportFragmentManager(), fragList);

    viewPager = (ViewPager) findViewById(R.id.pagerMain);
    viewPager.setAdapter(pager);

    listMain = (ListView) findViewById(R.id.listMain);
    listMain.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    switch (viewPager.getCurrentItem()) {
        case 0:
            FragmentOne fragOne = new FragmentOne();
            fragOne.onItemSelected(parent, view, pos, id);
            break;
        case 1:
            FragmentTwo fragTwo = new FragmentTwo();
            fragTwo.onItemSelected(parent, view, pos, id);
            break;
    }
}
public void onNothingSelected(AdapterView<?> arg0) {
}

Это Фрагмент:

public class FragmentOne extends Fragment implements OnItemSelectedListener {

View view;
ListView listMain;
ArrayList<String> invItems = new ArrayList<String>();

public FragmentOne() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
    view = inflater.inflate(R.layout.fragment_one, viewGroup, false);

    listMain = (ListView) v.findViewById(R.id.listMain);
    listMain.setAdapter(new AdapterItem(getActivity().getApplicationContext(),
        R.layout.tile_item, invItems));
    listMain.setOnItemSelectedListener(this);
    return view;
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    Log.i("Test", "hit");
}

Некоторые строки опущены для краткости. Давайте исходить из того, что Фрагменты отображаются правильно и все работает. Единственное, что работает неправильно, это то, что событие OnItemSelected в Activity вообще не срабатывает... тем более событие OnItemSelected во фрагменте. Что я здесь делаю неправильно?

Отредактируйте :ListViews, которые должны находиться в соответствующих Фрагментах (, так как они будут отображаться по отдельности в другом действии, а также в том, что указано выше ). Самая большая проблема здесь заключается в том, что я не могу установить OnItemSelectedListener в своей деятельности, поэтому событие никогда не срабатывает. У меня есть весь код, ведущий к этому моменту, отработанный и работающий, это просто OnItemSelectedListener, который не работает.

Edit2 :Завтра я добавлю награду к этому вопросу. В свете этого я подумал, что буду более неявным в отношении объема правильного ответа. Правильный ответ не предполагает каких-либо кардинальных изменений в макете или представлении пользовательского интерфейса. Правильный ответ передаст событие OnItemSelected фрагменту и будет обработан там.Ответ не заставит меня загружать свою активность строкой за строкой кода, чтобы достичь чего-то, что, как мне кажется, можно -сделать всего несколькими строками. Более элегантные ответы, очевидно, более привлекательны. Спасибо всем, кто взглянет на это.

Проблема здесь в том, что я получаю NPE в своей деятельности. Как указать ему ListView, который существует в макете, отличном от макета класса, в котором он находится.

5
задан user1449018 20 July 2012 в 11:59
поделиться