【问题标题】:Is there anyother way to call a method in FragmentActivity other than starting it using intents?除了使用意图启动它之外,还有其他方法可以调用 Fragment Activity 中的方法吗?
【发布时间】:2013-07-09 10:23:58
【问题描述】:

除了使用Intents 启动它之外,还有其他方法可以调用FragmentActivity 中的方法吗? 有人可以帮忙吗?

代码如下:

    class MainActiviy extends Activiy{
   //some code
   //here i need to show a dialog
 }


class MyDialog extends DialogFragment {

int mNum = 0;
static MyDialog newInstance(){
    return new MyDialog();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    //dialog view
    Log.i("MyDialog", "onCreateview");
    View v = inflater.inflate(R.layout.dialog, container, false);
    TextView v1 = (TextView) v.findViewById(R.id.text);
    v1.setText("dialog shown");
    return v;
}

}


public class DialogActivity extends FragmentActivity{

DialogFragment dialogfragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


}
void show(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment f = getSupportFragmentManager().findFragmentByTag("dialog");

    if(f != null){
        ft.remove(f);
    }

    dialogfragment = MyDialog.newInstance();

    dialogfragment.setCancelable(false);
    dialogfragment.show(ft, "dialog");
    dialogfragment.setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);

}
}

有没有其他方法可以调用DialogActivity中的show()方法从 另一个 Activity 类??

【问题讨论】:

  • 您的另一个活动是由 DialogActivity 启动的吗?
  • no..那个活动是mainActiviy。从那里我需要显示一个对话框。所以我添加了对话框片段。但我无法使用它
  • 我有点迷路了。您想要这样做的原因是您不想在另一个活动中显示对话框时复制整个方法 show()?
  • 如果我只是将 show() 方法复制到 activiy。那么 getSupportFragmentManager() 将显示错误。因为它需要 FragmentActiviy 对吗?
  • FragmentActivity 供兼容性库使用(来自android.support.v4.app),用于为旧版Android添加Fragment兼容性。但是 FragmentActivity 是 Activity,而不是 Fragment。作为证明,FragmentActivity 扩展了 Activity,而不是 Fragment!

标签: android android-fragmentactivity android-dialogfragment


【解决方案1】:

要显示对话框,您应该关注 Google 发布的the official guide

【讨论】:

  • 你只是尝试过这种方式。但我正在寻找其他的实现方式。
【解决方案2】:

我建议简单地将DialogFragment 放在一个单独的类中。这样您就可以从您的FragmentActivity 和应用程序中的任何其他位置调用它。似乎比尝试通过FragmentActivity 调用它更简单明了。

但是,如果这确实是您想要做的,我之前没有使用 FragmentActivity 这样做,但我使用 Fragment。如果您的FragmentActivity 动态加载Fragment,您可以添加一个标签,让您可以非常简单地在应用程序的其他位置访问该Fragment

我确定您可以通过该方法访问任何可见的Fragment 方法,并且如果您将 show() 方法包含在动态添加的Fragment 中。你可以实现它,不过非常迂回。

无论哪种方式,我都会亲自分离 DialogFragment 并创建一个辅助方法,如果它被大量使用,可能在 Application 对象中处理一些样板代码。

干杯

【讨论】:

  • 但我需要支持旧版本。所以我不得不使用 fragmentActivity 以便只有我可以获得 getSupportFragmentManager()。
  • 目前您已经创建了一个 DialogFragment 并在您的 Activity / FragmentActivity 中提供了一个 show() 方法(这部分没有区别)。我的提议是,您将所有与 DialogFragment 相关的代码从您的 Activity 中取出。那就是如果你想从你的活动中显示它,你创建一个新实例并显示它.. 类似 DialogFragment dialogFragment = MyDialog.newInstance();对话框片段.show();但是,这是关键,您也可以在应用中的任何位置执行此操作,无论您在应用中的哪个位置,都可以调用相同的对话框。
  • 如果您担心从其他地方访问 DialogFragment。那么为什么不让 DialogFragment 成为可以从任何地方调用的独立实体。当您还想从其他地方调用它时,通过在该 Activity 中进行所有创建和初始化来本地化它没有任何好处。在这种情况下,支持库没有任何区别
  • 正如你所提到的,将 MyDialog 作为一个单独的类很好。但要表明 myDialog 不能由 DialogFragment dialogFragment = MyDialog.newInstance(); dialogFragment.show(); 在活动类中,它应该被称为 dialogFragment.show(FragmentManager manager, String tag); 这很困难,因为在 FragmentManager 字段中我需要 supportFragmentManager 来支持旧版本.所以 fragmentActivity 正在成为一个问题。
  • 据我所知,使用单独的类,无论您是 Activity、Fragment、FragmentActivity 等,您都可以获得一个具体的 DialogFragment。实际显示 DialogFragment 的机制确实有所不同,是的。但这是一个使用 FragmentActivity 而不是普通 Activity 的简单案例,DialogFragment 仍然是一样的,可以从任何地方显示。我想这在很大程度上取决于您的问题是从任何地方显示相同的 DialogFragment 还是确实从任何地方调用任何 FragmentActivity 方法。如果是后者,这一切都无关紧要:)
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 2015-12-08
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多