Задать вопрос
nikkorejz
@nikkorejz
Android developer

Android. ListView. Как настроить обработчик нажатия элементов для открытия фрагментов?

Привет всем!
Ситуация такая: есть activity и она имеет список (ListView). Нужно настроить обработчик нажатия так, чтобы при нажатии на первый элемент вызывалась activity2 показывая первый фрагмент, и аналогично если нажать на второй элемент, то вывести activity2 показывая второй фрагмент.
Вот картинка, чтобы вы поняли о чем речь
8d317be127484408aa7932154565f436.png
Мой код:
public class Class extends Activity {
    ArrayAdapter<String> adapter = null;
    View emptyView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity);
        getActionBar().hide();
        ListView listView = (ListView) findViewById(R.id.ListView);
        listView.setEmptyView(
                emptyView = getLayoutInflater().inflate(R.layout.empty_view, null));
        ((ViewGroup)listView.getParent()).addView(emptyView);
        fillListView();
        listView.setAdapter(adapter);
        listView.setTextFilterEnabled(true);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // When clicked, show a toast with the TextView text
               if (((TextView) view).getText() == "Go1"){

               } else
               if (((TextView) view).getText() == "Go2"){

                  FragmentManager fragmentManager1 = getFragmentManager();
                   FragmentTransaction fragmentTransaction1 = fragmentManager1
                           .beginTransaction();
                   Intent Fragment1 = new Intent(Class.this, MainActivity.class);
                   startActivity(Fragment1);
                   Fr myFragment1 = new Fr();
                   myFragment1.setRetainInstance(true);
                   fragmentTransaction1.replace(R.id.container, myFragment1);
                   fragmentTransaction1.commit();
                   SearchActivity.this.finish();
               }
                if (((TextView) view).getText() == "Go3"){
                    
                }
            }
        });

        EditText editFilter = (EditText) findViewById(R.id.edit_search);
        editFilter.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                adapter.getFilter().filter(s.toString());
            }
        });

    }

    private void fillListView() {
        List<String> catList = new ArrayList<String>();
        catList.add("Go1");
        catList.add("Go2");
        catList.add("Go3");

        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, catList);
    }
}
  • Вопрос задан
  • 7073 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@linreal
Почему бы просто при нажатии на пункт списка не создать Intent c вложенным ключом, открыть Activity2 и уже в ней, на основании переданного ключа, загрузить необходимый фрагмент?

Activity1:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

Intent i = new Intent(getBaseContext(), Activity2.class);
i.putExtra("position", position);
startActivity(i);
}


Activity2:

int key = getIntent.getIntExtra("position", 0);

switch(i){

case 1:

//load Fr1

case 2:

//load Fr2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gadfi
@gadfi
https://gamega.org
Продолжу мысль, на мой взгляд более кошерно было бы создать свой интерфейс и реализовать его в родительской activity, чтобы в ней была вся логика, а во фрагменте просто крутилась ui и по клику вызывался метод интерфейса родительской activity
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы