Получение проверяемого списка в виде фрагмента - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь получить всплывающий фрагмент списка с кнопкой вверху списка.После того, как пользователь щелкнет элемент в меню навигации, основное действие будет заполнено моей кнопкой и фрагментом списка.Я получаю ошибку 'invoke virtual method', хотя элемент объявлен.Вот некоторый код.

Класс фрагмента моего списка:

public class ThingsManager extends Fragment {

ArrayList<String> selectedItems;
ListView checkable_list;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(layout.things_manager_fragment, container, false);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    //create an ArrayList object to store selected items
    selectedItems = new ArrayList<String>();
    //create an instance of ListView
    checkable_list.findViewById(R.id.checkable_list);
    //set multiple selection mode
    checkable_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    String[] things_factory = {"Sports", "Politics", "Food", "Television", "Movies", "Fashion",
            "Theoretical Physics"};
    //supply data itmes to ListView
    //ArrayAdapter<String> aa = new ArrayAdapter<String>(this, R.layout.row, R.id.things_check, things_factory);
    ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, things_factory);
    checkable_list.setAdapter(aa);
    //set OnItemClickListener
    checkable_list.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // selected item
            String selectedItem = ((TextView) view).getText().toString();
            if(selectedItems.contains(selectedItem))
                selectedItems.remove(selectedItem); //remove deselected item from the list of selected items
            else
                selectedItems.add(selectedItem); //add selected item to the list of selected items
        }
    });
}

public ThingsManager() {
    // Required empty public constructor
}
}

Макет фрагмента списка:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ThingsManager">

<TextView
    android:id="@+id/things_manager_header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Things Manager"
    android:textSize="25dp"/>

<!-- TODO: Update blank fragment layout -->

    <ListView
        android:id="@+id/checkable_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

Должен ли я контролировать просмотр списка в MainActivity или в FragmentClass?

1 Ответ

0 голосов
/ 01 июня 2018

Перенесите код инициализации всех видов и списка настроек с onActivityCreated на onCreateView метод.

И это утверждение

//create an instance of ListView
checkable_list.findViewById(R.id.checkable_list);

неверно.Вы должны найти ListView из раздуваемого вами представления в onCreateView.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
    // Inflate the layout for this fragment
   View rootView =  inflater.inflate(layout.things_manager_fragment, container, false);
   init(rootView);
   return rootView;
}

public void init(View rootView){


   //create an ArrayList object to store selected items
   selectedItems = new ArrayList<String>();
   //create an instance of ListView
   checkable_list = rootView.findViewById(R.id.checkable_list);
   //set multiple selection mode
   checkable_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
   String[] things_factory = {"Sports", "Politics", "Food", "Television", "Movies", "Fashion",
        "Theoretical Physics"};
   //supply data itmes to ListView
   //ArrayAdapter<String> aa = new ArrayAdapter<String>(this, R.layout.row, R.id.things_check, things_factory);
   ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, things_factory);
   checkable_list.setAdapter(aa);
   //set OnItemClickListener
   checkable_list.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // selected item
        String selectedItem = ((TextView) view).getText().toString();
        if(selectedItems.contains(selectedItem))
            selectedItems.remove(selectedItem); //remove deselected item from the list of selected items
        else
            selectedItems.add(selectedItem); //add selected item to the list of selected items
    }
   });

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