我知道很多人都提出过这个问题,或者说与之非常相似的问题,但是我读过的所有回复都尝试了我的应用程序仍然无效。它不会崩溃,但圆形加载标志会无限期地继续下去。
我现在拥有的是一个包含按钮和ListView
的片段。我希望能够在单击按钮时添加新项目。
这是我的MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(findViewById(R.id.container) != null) {
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new ListFragment())
.commit();
}
}
}
}
我的片段:
public class ListFragment extends Fragment implements View.OnClickListener {
private ArrayList<String> listItems = new ArrayList<String>();
private ArrayAdapter<String> myListAdapter;
private ListView listView;
public ListFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// The ArrayAdapter will take data from a source and
// use it to populate the ListView it's attached to.
myListAdapter = new ArrayAdapter<String>(
getActivity(),
R.layout.fragment_element_list,
R.id.list_item_textview,
listItems);
View rootView = inflater.inflate(R.layout.fragment_list, container, false);
listView = (ListView) rootView.findViewById(
R.id.listview_list);
listView.setAdapter(myListAdapter);
Button b = (Button) getView().findViewById(R.id.button);
b.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
listView.setAdapter(myListAdapter); //Adds to the List View
listItems.add("New Item");
break;
}
}
}
ActivityMain.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
FragmentList.xml:
<FrameLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ListFragment">
<Button
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Add" />
<ListView
android:id="@+id/listview_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
Fragment_element_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:id="@+id/list_item_textview">
</TextView>
我为我的重复性问题道歉。我还在学习Android,非常感谢任何帮助。
编辑:这是我到目前为止所做的更改。唯一出现的是页面加载器。@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// The ArrayAdapter will take data from a source and
// use it to populate the ListView it's attached to.
myListAdapter = new ArrayAdapter<String>(
getActivity(),
R.layout.fragment_element_list,
R.id.list_item_textview,
listItems);
View rootView = inflater.inflate(R.layout.fragment_list, container, false);
listView = (ListView) rootView.findViewById(
R.id.listview_list);
listView.setAdapter(myListAdapter);
Button b = (Button) rootView.findViewById(R.id.button);
b.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
listItems.add("New Item");
myListAdapter.notifyDataSetChanged();
break;
}
}
我也在logcat中找到了:
03-25 10:22:25.343 5617-5617/com.example.kristindiep.appmanager E/ViewRootImpl: sendUserActionEvent() mView == null
答案 0 :(得分:0)
尝试清除适配器中的项目,然后调用notifyDataSetChanged()方法:
{{! anything}}
答案 1 :(得分:0)
删除。来自onclick的listview.setadapter() 并将其添加到createView
并加入onclick() -
listItems.add();
adapter notifyDataSetChanged();
答案 2 :(得分:0)
我发现了两件事:
1.不要在getView()
方法上使用onCreateView
,请使用刚刚夸大的视图:
Button b = (Button) rootView.findViewById(R.id.button);
b.setOnClickListener(this);
2.您的onClick方法应如下所示:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
listItems.add("New Item");
myListAdapter.notifyDataSetChanged();
break;
}
}
答案 3 :(得分:0)
想出来!这是因为ListFragment是Android中的一个内置类,所以它不喜欢我正在“重新定义”它。