我正在尝试在Android中生成自定义对话框.我像这样创建我的Dialog:
dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);
Run Code Online (Sandbox Code Playgroud)
除了Dialog的标题之外,Everythings工作正常.即使我没有设置对话框的标题,对话框弹出窗口在对话框的位置也有一个空格.
有没有办法隐藏Dialog的这一部分?
我尝试使用AlertDialog,但似乎布局设置不正确:
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);
dialog = builder.create();
((TextView) dialog.findViewById(R.id.nr)).setText(number);
Run Code Online (Sandbox Code Playgroud)
如果我使用这段代码,我会在最后一行得到一个空指针异常.该对话框不为null,因此我尝试检索的TextView不存在.
如果我取消注释我使用Dialog构造函数的部分,一切正常,但对于我的对话框布局上方的标题.
您认为在Android平台中执行向导之类的向导(用户可以在具有下一个和后退按钮的屏幕之间导航,每个屏幕必须保存一些状态数据)的最佳方式.
我主要可以用两种方法思考:
每个屏幕都有一个活动+视图,然后我通过调用每个活动来切换屏幕.令我感到高兴的是,我可以使用系统后退按钮作为我的后台处理程序,我不需要自己处理,因为每个活动都会保存它自己的状态.
拥有一个活动和许多视图,以及我在每个屏幕中切换视图的更改,这有助于我重复使用更多代码,但会使保存状态变得混乱.
你怎么看?在Android上执行此操作的最佳方式是哪种?
我正在构建一个使用服务进行播放的音乐播放器.我有一个Activity UI来控制(播放,暂停,下一步......)服务.我想在按下下一个或上一个按钮时从我的服务更新UI.我想过传递一个整数值.这是我的代码:
我用过信使进行交流.我服务中的代码如下所示:
enum Event {
NextSongChanged, CurrentPlayingSong
};
public synchronized void registerHandler(Messenger m) {
clients.add(m);
}
private void emit(Event e) {
for (Messenger m : clients) {
try {
m.send(Message.obtain(null, e.ordinal()));
} catch (RemoteException exception) {
/* The client must've died */
clients.remove(m);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我打电话的方法点击下一步按钮:
public synchronized void playnext() {
reset();
if(songIndex < (songsList.size() - 1)) {
songIndex += 1;
playSong(songIndex);
} else {
songIndex = 0;
playSong(songIndex);
}
emit(Event.NextSongChanged);
}
Run Code Online (Sandbox Code Playgroud)
一旦我触发NextSongChanged事件,我想将"songIndex"变量传递给我的活动.有关如何实现这一点的任何想法?
我的活动代码来处理事件:
private Messenger playerMessenger = …Run Code Online (Sandbox Code Playgroud) 似乎我无法找出如何解释PreferenceFragment :: onPreferenceTreeClick(...)的返回值.在文档中没有提到如何使用返回值(Eclipse表示"@inheritDoc"并且Android HTML引用具有空体).
我尝试在PreferenceActivity :: onPreferenceTreeClick(...)上弃用的API中查找它,但它说的是,它已被弃用.
另外我尝试从方法中返回true和false,但在我看来它对任何事都没有影响.
那么 - 如果有人可以请那么好,告诉我返回值的变化是什么?
使用匿名内部类运行某些代码时,在Java中获取异常透明度的最佳实践方法是什么?
我在实际代码中看到的一种常见模式是使用一些伪Runnable类型接口来为某些给定代码指定一些上下文.我在JDK中可以想到的最好的例子是java.security.PrivilegedExceptionAction.
try {
boolean success = AccessController.doPrivileged(
new PrivilegedExceptionAction<Boolean>() {
@Override
public Boolean run() throws Exception {
// do something
// read file
FileInputStream fileInputStream =
new FileInputStream(new File("someFile"));
return true;
}
}
);
} catch (PrivilegedActionException e) {
if (e.getCause() instanceof FileNotFoundException) {
// handle IO exception
} else {
// impossible no other checked exception
}
}
Run Code Online (Sandbox Code Playgroud)
即使阅读代码,你也可以清楚地看到内部代码只会抛出一个找不到的文件,但是我们失去了检查异常的好处,因为调用者不知道实际抛出了什么异常.一个常见的错误是将代码引入匿名内部类,这会引发新的异常,代码不会强制您处理该异常.
我想要的是类似下面的内容,这种行为是否可以在没有语言变化的情况下实现?
public interface PrivilegedExceptionAction<T,V... extends Throwable>
{
public T run() throws V;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用InstrumentationTestCase单元测试我的应用程序的一个组件.
该组件将数据持久保存到内部存储,并用于Context::fileList();检索持久文件.
我遇到以下问题:在应用程序中使用此方法(在设备上)工作完全正常.但是,当我尝试(Android-)单元测试(也在设备上)使用InstrumentationTestCase我得到一个NullPointerException内部的fileList()方法.我深入研究android源代码并发现getFilesDir() (参见此处的源代码)返回null并导致此错误.
要重现的代码如下:
public class MyTestCase extends InstrumentationTestCase
{
public void testExample() throws Exception
{
assertNotNull(getInstrumentation().getContext().getFilesDir()); // Fails
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这种行为是否有意?我该怎么做才能绕过这个问题?我使用InstrumentationTestCase正确还是应该使用不同的东西?
当发送HTML格式的文本 HTML.fromHtml()并将其放入意图标记时ACTION_SEND,对于诸如三星注释2和所有htc设备之类的设备的默认电子邮件客户端,HTML格式的字符串将无法正确显示.但是,如果我选择gmail应用程序,那么我的HTML文本正常呈现.我尝试将邮件大小设置为最大,但这也没有帮助.
String message = "<p><b><i><a href=\"https://play.google.com/\">My App</a> Some text.</i></b></p>";
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.setType("message/rfc822");
email.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(message));
startActivity(Intent.createChooser(email, "Choose an Email client :"));
Run Code Online (Sandbox Code Playgroud) 我试图从我的Fragment类调用DialogFragment.我有一个ImageView,并希望在我设置的ImageView的onClickListener中调用我的DialogFragment类.
我在onClick中遇到错误,我设置的代码试图调用DialogFragment.
我在"show"上收到一条错误,说明"DialogFragment类型中的方法show(FragmentManager,String)不适用于参数(FragmentManager,String)",并且"new Instance"上的错误表明"方法newInstance()未定义MyDialogFragment类型"
这是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
final View v = inflater.inflate(R.layout.image_detail_fragment,
container, false);
mImageView = (RecyclingImageView) v.findViewById(R.id.imageView);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Here
MyDialogFragment dialog = MyDialogFragment.newInstance();
dialog.show(getFragmentManager(), "fragmentDialog");
}
});
return v;
}
Run Code Online (Sandbox Code Playgroud)
DialogFragment类:
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
class MyDialogFragment extends DialogFragment {
Context mContext;
public MyDialogFragment() {
mContext = getActivity();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) 我正在为一堂课写一个硬币翻转程序.我在将文本放在每个网格中心时遇到问题.网格布局为3 x 3,但每个网格中的文本"H"或"T"左对齐.这是创建网格的代码.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Lab3Panel extends JPanel {
Lab3Panel() {
setLayout(new GridLayout(3, 3, 1, 1));
Lab3Label[] label = new Lab3Label[9];
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);
for (int i = 0; i < 9; i++) {
label[i] = new Lab3Label(i);
add(label[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Lab3Panel.java:15: error: cannot find symbol label.setHorizontalTextPosition(SwingConstants.CENTER);
^
Run Code Online (Sandbox Code Playgroud)