Android 将可检查列表视图获取到片段中
我正在尝试让一个可检查列表视图片段弹出,并在列表视图顶部有一个按钮。用户单击导航菜单中的某个项目后,主活动将填充“我的按钮”和“列表视图”片段。我得到了“invoke virtual method”错误,即使声明了中的元素。这里有一些代码 我的列表片段类:Android 将可检查列表视图获取到片段中,android,android-studio,listview,android-fragments,Android,Android Studio,Listview,Android Fragments,我正在尝试让一个可检查列表视图片段弹出,并在列表视图顶部有一个按钮。用户单击导航菜单中的某个项目后,主活动将填充“我的按钮”和“列表视图”片段。我得到了“invoke virtual method”错误,即使声明了中的元素。这里有一些代码 我的列表片段类: public class ThingsManager extends Fragment { ArrayList<String> selectedItems; ListView checkable_list; @Override
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"/>
公共类ThingsManager扩展片段{
ArrayList selectedItems;
ListView可检查列表;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
返回充气机。充气(布局、物品管理器、碎片、容器、假);
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
//创建ArrayList对象以存储选定项
selectedItems=newarraylist();
//创建ListView的实例
可检查列表。findViewById(R.id.可检查列表);
//设置多重选择模式
可检查列表。设置选项模式(列表视图。选择模式\u多个);
String[]things_factory={“体育”、“政治”、“食品”、“电视”、“电影”、“时尚”,
“理论物理学”};
//向ListView提供数据itmes
//ArrayAdapter aa=新的ArrayAdapter(this,R.layout.row,R.id.things\u check,things\u factory);
ArrayAdapter aa=新的ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1,things_factory);
可检查的设置适配器列表(aa);
//设置MClickListener
可检查的列表.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//选定项目
字符串selectedItem=((TextView)视图).getText().toString();
if(selectedItems.contains(selectedItem))
selectedItems.remove(selectedItem);//从所选项目列表中删除取消选择的项目
其他的
selectedItems.add(selectedItem);//将所选项目添加到所选项目列表中
}
});
}
公共ThingsManager(){
//必需的空公共构造函数
}
}
列表片段布局:
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中控制listview?将所有视图初始化和listview设置代码从创建的ActivityCreated方法移动到创建视图方法 你的这个声明呢
//create an instance of ListView
checkable_list.findViewById(R.id.checkable_list);
这是错误的。您必须从onCreateView
中膨胀的视图中找到ListView
@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
}
});
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气器。充气(layout.things\u manager\u片段,容器,false);
init(rootView);
返回rootView;
}
公共void init(视图根视图){
//创建ArrayList对象以存储选定项
selectedItems=newarraylist();
//创建ListView的实例
可检查列表=rootView.findViewById(R.id.checkable\u列表);
//设置多重选择模式
可检查列表。设置选项模式(列表视图。选择模式\u多个);
String[]things_factory={“体育”、“政治”、“食品”、“电视”、“电影”、“时尚”,
“理论物理学”};
//向ListView提供数据itmes
//ArrayAdapter aa=新的ArrayAdapter(this,R.layout.row,R.id.things\u check,things\u factory);
ArrayAdapter aa=新的ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1,things_factory);
可检查的设置适配器列表(aa);
//设置MClickListener
可检查的列表.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//选定项目
字符串selectedItem=((TextView)视图).getText().toString();
if(selectedItems.contains(selectedItem))
selectedItems.remove(selectedItem);//从所选项目列表中删除取消选择的项目
其他的
selectedItems.add(selectedItem);//将所选项目添加到所选项目列表中
}
});
}
您遇到了什么错误?发布您的LogcatHanks,这将有助于它不起作用,在init(rootView)上给我一个错误;还说虚拟方法错误。为了让您知道man.java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.view android.widget.ListView.findViewById(int)”(我的缺点是太晚了)。第一个实例在init(rootView)上,第二个实例在可检查列表上