为什么我的 Android AdapterView 在将其移动到片段后无法正常工作?
Why is my Android AdapterView not working after moving it to a fragment?
我正在开发一个从数据库读取数据并将其显示在 ListView 中的应用程序。在我将我的代码从 MainActivity.java 移动到一个片段之前,它一直运行良好。现在,没那么多了。我没有收到任何错误,但列表不会像代码在主 activity 中时那样填充。这是我 before 片段:
data_view.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_below="@+id/top_linear_layout">
<include layout="@layout/table_header" />
<ListView
android:id="@+id/row_of_stats"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
</RelativeLayout>
来自 MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
myDBHelper = new DatabaseHelper(this);
dataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"time", "col1", "col2", "col3", "col4", "col5"};
int[] toViews = {R.id.time_textview, R.id.col1_textview, R.id.col2_textview, R.id.col3_textview, R.id.col4_textview, R.id.col5_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.my_data_row_layout, dataCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) findViewById(R.id.row_of_stats);
myListView.setAdapter(mySimpleCursorAdapter);
}
现在,这是我的新片段的样子,但它不起作用:
package mypackage.main;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import mypackage.R;
public class MyFragment extends Fragment {
private View rootView;
private DatabaseHelper myDBHelper;
private Cursor dataCursor;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.data_view, container, false);
myDBHelper = new DatabaseHelper(getActivity());
dataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"time", "col1", "col2", "col3", "col4", "col5"};
int[] toViews = {R.id.time_textview, R.id.col1_textview, R.id.col2_textview, R.id.col3_textview, R.id.col4_textview, R.id.col5_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.my_data_row_layout, dataCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) rootView.findViewById(R.id.row_of_stats);
myListView.setAdapter(mySimpleCursorAdapter);
return inflater.inflate(R.layout.data_view, container, false);
}
}
就像我说的,AdapterView 工作得很好,并显示了数据列表,但现在它只是空的,没有错误。
您的布局被误用了两次。
变化:
return inflater.inflate(R.layout.data_view, container, false);
至
return rootView;
我正在开发一个从数据库读取数据并将其显示在 ListView 中的应用程序。在我将我的代码从 MainActivity.java 移动到一个片段之前,它一直运行良好。现在,没那么多了。我没有收到任何错误,但列表不会像代码在主 activity 中时那样填充。这是我 before 片段:
data_view.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_below="@+id/top_linear_layout">
<include layout="@layout/table_header" />
<ListView
android:id="@+id/row_of_stats"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
</RelativeLayout>
来自 MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
myDBHelper = new DatabaseHelper(this);
dataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"time", "col1", "col2", "col3", "col4", "col5"};
int[] toViews = {R.id.time_textview, R.id.col1_textview, R.id.col2_textview, R.id.col3_textview, R.id.col4_textview, R.id.col5_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.my_data_row_layout, dataCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) findViewById(R.id.row_of_stats);
myListView.setAdapter(mySimpleCursorAdapter);
}
现在,这是我的新片段的样子,但它不起作用:
package mypackage.main;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import mypackage.R;
public class MyFragment extends Fragment {
private View rootView;
private DatabaseHelper myDBHelper;
private Cursor dataCursor;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.data_view, container, false);
myDBHelper = new DatabaseHelper(getActivity());
dataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"time", "col1", "col2", "col3", "col4", "col5"};
int[] toViews = {R.id.time_textview, R.id.col1_textview, R.id.col2_textview, R.id.col3_textview, R.id.col4_textview, R.id.col5_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.my_data_row_layout, dataCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) rootView.findViewById(R.id.row_of_stats);
myListView.setAdapter(mySimpleCursorAdapter);
return inflater.inflate(R.layout.data_view, container, false);
}
}
就像我说的,AdapterView 工作得很好,并显示了数据列表,但现在它只是空的,没有错误。
您的布局被误用了两次。 变化:
return inflater.inflate(R.layout.data_view, container, false);
至
return rootView;