对于调试和用户信息消息,我已经使用msgbox
(长期VB )例程与Swing
进行了广泛的对比:< / p>
public static void msgbox(String s){
javax.swing.JOptionPane.showMessageDialog(null, s);
}
我刚刚开始了解Android应用开发。我在教科书中发现Toast
是向用户显示信息的一种快速但又尴尬的方式。这是本书的代码:
String selected="...whatever...";
Toast toast=Toast.makeText(getApplicationContext(),selected,Toast.LENGTH_SHORT);
toast.show();
所以我写了这个:
public void msgbox(String message)
{
android.widget.Toast.makeText(getApplicationContext(),
message,
android.widget.Toast.LENGTH_SHORT)
.show();
}
当我只有一个班级MainActivity
时,我第一次使用它。然后我尝试将其与Fragment
一起使用,如下所示:
public class FragmentA extends Fragment {
public View onCreateView(LayoutInflater
inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_a, container, false);
MainActivity.msgbox("Fragment A"); // **********************************
Button button = (Button) v.findViewById(R.id.button1);
//...
return v;
}
}
msgbox
行上的错误为Non-static method msgbox cannot be referenced from a static context.
所以我在static
的声明中添加了msgbox
,这似乎是一个好主意,因为我的Swing
msgbox
版本的声明如下:
public static void msgbox(String message)
{
android.widget.Toast.makeText(getApplicationContext(), // ********************
message,
android.widget.Toast.LENGTH_SHORT).show();
}
这会使原始错误消失,但它被Non-static method getApplicationContext cannot be referenced from a static context
取代。
要解决 错误,我更改了msgbox
的声明以包含Context
:
public static void msgbox(Context c, String message)
{
android.widget.Toast.makeText(c, message, android.widget.Toast.LENGTH_SHORT)
.show();
}
这有效并且非常有意义,但我对msgbox
的快速而又脏的字符串参数调用现在已经消失了。我现在必须从msgbox
...
main
msgbox(getApplicationContext(), "onCreate; about to show fragment A");
......并且从一个单独的类中这样:...
MainActivity.msgbox(getActivity(), "Fragment A");
我尝试将null
传递给Context
,该Swing
与JOptionDialog
null pointer exception
一起使用,但我得到makeText
@NonNull
,其第一个参数(我因此发现)被记录为getApplicationContext
。
我是否可以使用getActivity
和makeText
以外的方法作为msgbox
的第一个参数,以便我static
Context
?
或者我只需提供Swing
参数就会受到影响?
另一方面,由于可以使用static
执行此操作,是否有人使用makeText
one-String参数的msgbox类型方法进行共享?它不必使用{{1}}。
(我挣扎了很长时间以至于觉得我和Java一样舒服.Android有点令人生畏,让我怀疑我知道的是什么......)
答案 0 :(得分:1)
我还没试过这个,但是考虑继承Application,让它构建一个静态的单例对象,给它应用程序上下文。然后把你的&#39; msgbox&#39;单身人士的方法。
答案 1 :(得分:0)
在Android中,上下文是一个非常重要的概念。我建议你仔细阅读。
要回答这个问题,我强烈建议您使用该方法在片段中制作Toast。对您的上下文使用getActivity()。如果需要,可以在Utils类中创建一个静态方法,该方法将Context作为参数。然后,从您的Activity或Fragment中访问它,并分别传入this或getActivity()。