小编Gen*_*Sys的帖子

Android:如何创建没有标题的Dialog?

我正在尝试在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 dialog android-layout

263
推荐指数
11
解决办法
22万
查看次数

在Android中制作类似应用程序的向导

您认为在Android平台中执行向导之类的向导(用户可以在具有下一个和后退按钮的屏幕之间导航,每个屏幕必须保存一些状态数据)的最佳方式.

我主要可以用两种方法思考:

  1. 每个屏幕都有一个活动+视图,然后我通过调用每个活动来切换屏幕.令我感到高兴的是,我可以使用系统后退按钮作为我的后台处理程序,我不需要自己处理,因为每个活动都会保存它自己的状态.

  2. 拥有一个活动和许多视图,以及我在每个屏幕中切换视图的更改,这有助于我重复使用更多代码,但会使保存状态变得混乱.

你怎么看?在Android上执行此操作的最佳方式是哪种?

user-interface android user-experience wizard

29
推荐指数
3
解决办法
2万
查看次数

将数据从服务发送到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)

android android-service android-activity

11
推荐指数
1
解决办法
3万
查看次数

PreferenceFragment :: onPreferenceTreeClick返回值 - 它做什么?

似乎我无法找出如何解释PreferenceFragment :: onPreferenceTreeClick(...)的返回值.在文档中没有提到如何使用返回值(Eclipse表示"@inheritDoc"并且Android HTML引用具有空体).

我尝试在PreferenceActivity :: onPreferenceTreeClick(...)上弃用的API中查找它,但它说的是,它已被弃用.

另外我尝试从方法中返回true和false,但在我看来它对任何事都没有影响.

那么 - 如果有人可以请那么好,告诉我返回值的变化是什么?

android

8
推荐指数
1
解决办法
4730
查看次数

从匿名内部类中抛出已检查的异常

使用匿名内部类运行某些代码时,在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)

java nested-class inner-classes

6
推荐指数
1
解决办法
4485
查看次数

Android InstrumentationTestCase getFilesDir()返回null

我正在使用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正确还是应该使用不同的东西?

我发现了这个问题,但我不确定这是否涵盖了我遇到的同样问题.

android unit-testing

6
推荐指数
1
解决办法
2806
查看次数

发送到ACTION_SEND时,<b> <i> <a>等html标签无法使用HTML.fromHtml()

当发送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)

android

6
推荐指数
1
解决办法
796
查看次数

从Fragment调用DialogFragment

我试图从我的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)

android android-dialogfragment

6
推荐指数
1
解决办法
2万
查看次数

编译错误:"找不到符号"

我正在为一堂课写一个硬币翻转程序.我在将文本放在每个网格中心时遇到问题.网格布局为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)

java

0
推荐指数
1
解决办法
676
查看次数