ListView适配器未通过Fragment调用

时间:2015-04-02 19:21:57

标签: android listview android-fragments

当我通过MainActivity调用ListViewAdpater时,它工作正常。但是如果我创建ListViewFragment它就不会被调用。我在MainActivity中添加了ListViewFragment listViewFragment = new ListViewFragment();。我有ListViewAdapter为

public class ListViewAdapter extends ArrayAdapter<String> {
    public ListViewAdapter(Context context, String[] sensorArray) {
        super(context, R.layout.listview_adapter, sensorArray);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(getContext());
        View view = layoutInflater.inflate(R.layout.listview_adapter, parent, false);
        ImageView imageView = (ImageView)  view.findViewById(R.id.imageView);
        TextView textView = (TextView) view.findViewById(R.id.textView);
        imageView.setImageResource(R.drawable.image);
        textView.setText(getItem(position));
        return view;
    }
}

但是当我通过下面的Fragment调用时,我看不到任何listView

public class ListViewFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_main, container, false);

        String[] sensorArray = getResources().getStringArray(R.array.sensor_array);

        ListView listView = (ListView) view.findViewById(R.id.listView);
        listView.setAdapter(new ListViewAdapter(getActivity(),sensorArray));
        return view;
    }
}

当我运行调试器时,它调用ListViewFragment但它没有进入onCreate方法

我更改了xml文件,如下所示 所以在activity_main.xml中我添加了`

<fragment  android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/fragment"
    android:name="com.app.fragment.ListViewFragment"
    tools:layout="@layout/listviewfragment"/>

and created listviewfragment.xml as'

<ListView 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"
    />

这是对的吗?

2 个答案:

答案 0 :(得分:1)

需要将片段附加到活动才能运行。您需要使用xml(静态)或使用片段管理器(动态)将片段添加到活动中。

静态地,您可以通过将其放入活动的布局文件中来添加片段:

<fragment android:name="com.example.android.fragments.MyFragment"
              android:id="@+id/my_fragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />

android:name应指向您的片段类。

使用片段管理器,您可以添加片段,如下所示: 在你的活动中,onCreate()只需使用:

    ListViewFragment listViewFragment = new ListViewFragment();
    getFragmentManager().beginTransaction().add(R.id.container_view, listViewFragment).commit();

有关详细信息,请参阅FragmentManagerFragmentTransaction。您也可以将replace方法与容器视图一起使用,顾名思义将替换该片段。

答案 1 :(得分:1)

您需要使用FragmentTransaction,并且必须在主活动布局中包含FrameLayout元素。

activity_main.xml中:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"/>

MainActivity:

FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_container,new ListViewFragment(), "sensorArray");
ft.commit();