小编asp*_*ame的帖子

将服务绑定到Android中的活动

我正在尝试编写一个使用RTSP播放流式音频的简单媒体播放器.我有一个GUI活动和一个执行播放的服务.我的问题是如何在活动和服务之间进行最佳沟通(例如,根据玩家状态更新gui).

我知道我可以使用onBind()将服务绑定到活动,但如果我理解正确,如果活动被终止,这将停止服务.即使用户退出活动,我也想继续播放.有没有任何标准或首选的方法来处理这个问题?

service android

87
推荐指数
4
解决办法
12万
查看次数

Android:setSelection对Spinner没有影响

我在Spinner上遇到setSelection问题.我在代码中显示微调器时将值设置为预选,但它没有任何效果,并且始终选择列表中的第一个选项.代码如下所示:

    LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View dialogView = li.inflate(R.layout.edit_event, null);
    ...
    ArrayList<String> routes = new ArrayList<String>();
    // routes filled with values at runtime
    ...
    ArrayAdapter<String> aa = new ArrayAdapter<String>(GOFdroid.this, android.R.layout.simple_spinner_item, routes);
    aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    Spinner destSpinner = (Spinner) dialogView.findViewById(R.id.edit_event_destination);

    String dest = events.get(pos).getDestination();
    int routesPos = routes.indexOf(dest);
    Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
    destSpinner.setSelection(routesPos);

    destSpinner.setAdapter(aa);
Run Code Online (Sandbox Code Playgroud)

除了setSelection-part之外,代码按预期工作,我无法弄清楚原因.

微调器的XML布局看起来像这样(不是整个布局,只有微调器部分):

// DESTINATION
<TextView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Destination:" />
<Spinner
   android:id="@+id/edit_event_destination"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:prompt="@string/choose_dest"
   android:layout_marginBottom="10dip"
   android:text="" />
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助!

莱纳斯

android spinner

47
推荐指数
4
解决办法
5万
查看次数

Ellipsize不适用于自定义listView中的textView

我有一个listView,其中包含由下面的xml-layout定义的自定义对象.我希望带有id"info"的textView在一行上进行椭圆化,我尝试使用这些属性

android:singleLine="true"
android:ellipsize="end"
Run Code Online (Sandbox Code Playgroud)

没有成功.

如果我将layout_width设置为固定宽度,例如

android:layout_width="100px"
Run Code Online (Sandbox Code Playgroud)

文本被截断了.但出于便携性原因,这不是一个可接受的解决方案.

你能发现问题吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5px"
>
<TextView  
android:id="@+id/destination"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="22dp"
android:paddingLeft="5px"
/>

<TextView  
android:id="@+id/date"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="15dp"
android:paddingLeft="5px"
/>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5px"
android:paddingTop="10px" 
>
    <TableRow>
        <TextView
            android:id="@+id/driver_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/driver_label" />
        <TextView
            android:id="@+id/driver" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/passenger_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/passenger_label" />
        <TextView
            android:id="@+id/passengers" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/info_label"
            android:gravity="right"
            android:paddingRight="5px" 
            android:text="@string/info_label"/>
        <TextView
            android:id="@+id/info"
            android:layout_width="fill_parent"
            android:singleLine="true"
            android:ellipsize="end" />
    </TableRow>
</TableLayout> 
Run Code Online (Sandbox Code Playgroud)

xml android textview

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

在android中的活动之间传递非原始类型的数据

假设您要启动一个新活动并从当前活动传递一些数据.如果数据是基本类型,您可以简单地使用intent并添加额外内容,但是如何为更复杂的数据结构(如arraylists或对象)执行此操作?

android data-structures android-activity

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

收到的错误额外内容包含所有意图但第一个意外收到

我有一个小应用程序,可用于设置未来事件的提醒.该应用程序使用AlarmManager来设置提醒用户的时间.当警报响起时,BroadcastReceiver会对此进行注册,然后启动服务以通过状态栏中的Toast和通知通知用户.

为了在通知和吐司中显示正确的信息,一些额外的信息与意图一起传递.第一次注册提醒时,BroadcastReceiver收到并传递给服务的信息是正确的.但是对于每个后续提醒(即BroadcastReceiver接收的每个新意图),即使发送的信息不同,该信息也保持不变.

例如,如果字符串"foo"作为第一个意图的附加项放置,则广播接收器正确提取"foo".如果在第二个意图中将"bar"作为附加项放置,则广播接收器仍然会提取"foo".

这是注册警报并传递意图的代码(主要的ui-class):

Intent intent = new Intent(ACTION_SET_ALARM);
intent.putExtra("desc", desc);
intent.putExtra("time", time);
intent.putExtra("dbId", dbId);
intent.putExtra("millis", millis);
PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0);

// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, millis, pIntent);
Run Code Online (Sandbox Code Playgroud)

BroadcastReceiver类中的onReceive()方法:

@Override
public void onReceive(Context context, Intent intent) {

    Intent i = new Intent(context, AlertService.class);

    String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc");
    String time = intent.getStringExtra("time");
    long dbId = intent.getLongExtra("dbId", -1);
    long millis = intent.getLongExtra("millis", -1);

    i.putExtra("desc", desc);
    i.putExtra("time", time);
    i.putExtra("dbId", …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-intent

12
推荐指数
3
解决办法
2357
查看次数

加载VBA时以编程方式重建.exd文件

将Microsoft Office 2007更新到Office 2010后,我们软件中嵌入的某些自定义VBA脚本无法编译,并显示以下错误消息:

对象库无效或包含对无法找到的对象定义的引用.

据我所知,此错误是Microsoft的安全更新(Microsoft安全通报960715)的结果.将ActiveX控件添加到VBA脚本时,有关控件的信息存储在本地硬盘驱动器(.exd-files)上的缓存文件中.安全更新修改了其中一些控件,但.exd文件未自动更新.当VBA脚本尝试加载存储在缓存文件中的旧版本控件时,会发生错误.必须从硬盘驱动器中删除这些缓存文件才能成功加载控件(这将自动创建新的,更新的.exd文件).

我想要做的是以编程方式(使用Visual C++)删除我们的软件加载时过时的.exd文件.使用CApcProject::ApcProject.Open我打开VBA项目时,设置以下标志:axProjectThrowAwayCompiledState.

TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState)));
Run Code Online (Sandbox Code Playgroud)

根据文档,此标志应该导致重新编译VBA项目以及要删除和重建的临时文件.我还试图更新主机应用程序类型库的校验和,它应具有相同的效果.然而,这些修复工具似乎都没有完成这项任务,而且我的想法已经不多了.

vba apc visual-c++ office-2010

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

在android中过滤ListView时检查了错误的项目

我有一个带有多个选项的ListView,其中一些从一开始就使用了

setItemChecked(position, true);
Run Code Online (Sandbox Code Playgroud)

我将它与过滤选项结合起来

setTextFilterEnabled(true)
Run Code Online (Sandbox Code Playgroud)

因此很容易在列表中找到特定条目.

问题是当我过滤列表时,条目在列表视图中切换位置.例如,三个条目:'A','B'和'C',其中事先检查'C'(即列表中位置3的条目).当我在键盘上键入"C"时,只显示"C"条目(按预期).现在不再检查'C',因为该条目已从检查的位置3移动到列表中未检查的位置1.

此行为导致应用程序中的一些不太受欢迎的效果.有没有办法"通过过滤移动选择",即将选中状态绑定到条目而不是列表中的初始位置?或者我需要找到一种新方法吗?

谢谢,

莱纳斯

checkbox android listview filtering

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

帮助构建正则表达式

我需要知道一个字符串是否与许多不同的标准相匹配.我试图通过使用正则表达式来解决这个问题,然后看看它是否匹配(在Java中:str.matches(myRegex);),但是我无法做到正确.

标准如下:

  • 要匹配的字符串由4个字母构成,[AZ]
  • 它可以在" - ","+"或"VC"中的一个之前(但不一定).
  • 它只匹配包含4个字母的字符串(以及可能的前面字符)

例子:

  • "SHSN" - >匹配
  • "+ SHRA" - >匹配
  • "VCSHRA" - >匹配
  • "CAVOK" - >不匹配
  • " - + SHSN" - >不匹配

这可以在一个正则表达式中完成吗?或者应该在代码中完成还是两者结合?

谢谢,

莱纳斯

java regex string-matching

4
推荐指数
1
解决办法
83
查看次数

EditText不返回getText()上的内容

下面的代码片段显示了一个带有简单登录表单的Dialog.问题是当用户点击登录按钮时,输入到EditTexts的文本不会在getText() - 调用上返回.但是,如果我在xml-layout的EditTexts上设置android:setText ="foo",则在getText()上返回"foo".知道为什么在运行时输入的文本不会粘住?

private void showLoginDisplay() {
    loginDialog = new Dialog(GOFdroid.this);
    loginDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, 
                                WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
    loginDialog.setTitle("Logga in");

    LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View dialogView = li.inflate(R.layout.login_dialog, null);
    loginDialog.setContentView(dialogView);

    loginDialog.show();

    Button loginButton = (Button) dialogView.findViewById(R.id.login_button);
    Button cancelButton = (Button) dialogView.findViewById(R.id.cancel_button);

    EditText unameView = (EditText) dialogView.findViewById(R.id.uname_id);
    if (unameView != null)
        Log.d(TAG, "unameView != null");
        Log.d(TAG, "uname.getText(): " + unameView.getText().toString());
        uname = unameView.getText().toString();

    EditText pwdView = (EditText) dialogView.findViewById(R.id.pwd_id);
    if (pwdView != null)    
        pwd = pwdView.getText().toString();

    Log.d(TAG, "uname = " + uname + ", pwd …
Run Code Online (Sandbox Code Playgroud)

android dialog

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