【问题标题】:Which fragmentManager Should i use我应该使用哪个 fragmentManager
【发布时间】:2014-08-29 04:06:00
【问题描述】:

我正在使用片段并尝试制作一个表单,我可以使用 datepicker 获取日期,然后将其存储在数据库中(现在没有问题)我正在按照指南学习如何使用 datepicker在碎片活动中。我有两个问题(和错误) 我一直在使用This guide

我得到这个错误:

“getSupportFragmentManager 方法未定义类型”

我读过“Fragments”中没有getSupportFragmentManager,但它们在“FragmentActivity”中

“Fragments”中有一个等价的方法吗?或者我应该怎么做。

我正在搜索和阅读很多指南,但这是我发现并遇到此问题的简单方法。

我将发布我的 Fragment 类、fragment xml 和 datepickerfragment

FragmentClass (regventa_Fragment)..

public class Regventa_Fragment extends Fragment  {
public Button guardar;
public Button fecha_button;

public Regventa_Fragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_regventa, container, false);

    Toast.makeText(getActivity(), "Hola", Toast.LENGTH_SHORT).show();


    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    guardar=(Button)getView().findViewById(R.id.guardar);
    //fecha_button=(Button)getView().findViewById(R.id.fecha_button);
    getView().findViewById(R.id.fecha_button).setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View v) {
            showDatePicker();
           }

        private void showDatePicker() {
            // TODO Auto-generated method stub

        }
          });
}

private void showDatePicker() {
      DatePickerFragment date = new DatePickerFragment();
      /**
       * Set Up Current Date Into dialog
       */
      Calendar calender = Calendar.getInstance();
      Bundle args = new Bundle();
      args.putInt("year", calender.get(Calendar.YEAR));
      args.putInt("month", calender.get(Calendar.MONTH));
      args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
      date.setArguments(args);
      /**
       * Set Call back to capture selected date
       */
      date.setCallBack(ondate);
      date.show(getFragmentManager(), "Date Picker");
     }

     OnDateSetListener ondate = new OnDateSetListener() {
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
      }
     };

}

fragment_regventa.XML

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="15dp"
    android:gravity="center_horizontal" >

    <Button
        android:id="@+id/guardar"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/guardar" />

    <Button
        android:id="@+id/borrar"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/borrar" />
</LinearLayout>

<Button
    android:id="@+id/fecha_button"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/fecha_venta"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="15dp"
    android:text="@string/fecha_button" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/regventa"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/comprador"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:ems="10"
    android:hint="@string/comprador" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/fecha_venta"
    style="android:editTextStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/fecha_button"
    android:layout_below="@+id/comprador"
    android:layout_marginTop="17dp"
    android:ems="10"
    android:hint="@string/fecha_venta"
    android:textAlignment="center"
    android:textSize="17sp" />

<EditText
    android:id="@+id/elevendidos"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/pesoventa"
    android:layout_below="@+id/pesoventa"
    android:layout_marginTop="24dp"
    android:ems="10"
    android:hint="@string/elementos_vendidos"
    android:inputType="number" />

<EditText
    android:id="@+id/pesoventa"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/comprador"
    android:layout_below="@+id/fecha_button"
    android:layout_marginTop="14dp"
    android:ems="10"
    android:hint="@string/pesoventa" />

DatePicker 片段

public class DatePickerFragment extends DialogFragment {
OnDateSetListener ondateSet;

public DatePickerFragment() {
}

public void setCallBack(OnDateSetListener ondate) {
ondateSet = ondate;
}

private int year, month, day;

@Override
public void setArguments(Bundle args) {
super.setArguments(args);
year = args.getInt("year");
month = args.getInt("month");
day = args.getInt("day");
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), ondateSet, year, month, day);
}
}

如果我从“Fragment”更改为“FragmentActivity”,效果会好吗?与我拥有的其他片段?..谢谢

【问题讨论】:

  • getSupportFragmentManager 仅适用于继承 FragmentActivity 的类。如果您想使用片段,请尝试使用 getFragmentManager。

标签: android android-fragments datepicker android-fragmentactivity


【解决方案1】:

我解决了问题..我正在使用

import android.support.v4.app.Fragment 

而不是...

import android.app.Fragment;

在 DatepickerFragment 中。

之后我使用...

date.show(getActivity().getFragmentManager(), "Date Picker");

谢谢

【讨论】:

    【解决方案2】:

    getSupportFragmentManager() 用于安卓支持库

    意思是

    如果你使用支持库,你必须使用getSupportFragmentManager() 否则你必须使用getFragmentManager()

    验证检查您的导入

    import android.support.v4.app.Fragment; 意味着您使用支持库 那么你必须使用getSupportFragmentManager()

    import android.app.Fragment 表示您正在使用本机库 那么你必须使用getFragmentManager()

    祝你好运:)

    【讨论】:

    • 抱歉耽搁了,我导入这个库 import android.app.Fragment;我以这种方式修改了该行 date.show(getActivity().getFragmentManager(), "Date Picker");.. 但是现在说我需要在 datepickerfragment.java 中创建一个名为 show 的方法我应该做什么?
    【解决方案3】:

    首先你需要了解 FragmentActivity 和 Fragment 之间的区别。 FragmentActivity 是 Activity 的子类,Activity 包含 Fragment,两者是不同的东西。 请参阅下面的链接并查看片段不是从 Activity 继承的。

    因此,如果您需要使用 getSupportFragmentManager(),则首先调用保存片段的活动并调用片段管理器。喜欢:getActivity().getSupportFragmentManager()

    另一件事是,如果你使用支持库中的 Fragment,那么你会得到“getSupportFragmentManager()”,否则你会得到“getFragmentManager()

    谢谢

    【讨论】:

    • 我导入这个库 import android.app.Fragment;我改变了 getFragmentManager(); to date.show(getActivity().getFragmentManager(), "Date Picker");他们的 IDE 说我不需要在 datepickerfragment 中创建 show 方法。但我不知道应该在 show 方法中放什么
    • 怎么可能!我看到了你的解决方案。如果您通过导入“android.support.v4.app.Fragment”来创建片段,那么您需要传递“getSupportFragmentManager()”,我的意思是“date.show(getActivity().getSupportFragmentManager(), “Date Picker”);”如果你使用 getFragmentManager() 那么 IDE 也会报错。请再次检查您的解决方案。
    • @sayern 。嗨,我正在使用 api >14 然后我将 android.support.v4.app.fragment 更改为另一个(我现在不记得名字了)。因此,在使用 getfragmentmanager 进行更改之后。换句话说,我的错误是导入了错误的库:D
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2018-08-17
    相关资源
    最近更新 更多