我正在尝试编写一个使用RTSP播放流式音频的简单媒体播放器.我有一个GUI活动和一个执行播放的服务.我的问题是如何在活动和服务之间进行最佳沟通(例如,根据玩家状态更新gui).
我知道我可以使用onBind()将服务绑定到活动,但如果我理解正确,如果活动被终止,这将停止服务.即使用户退出活动,我也想继续播放.有没有任何标准或首选的方法来处理这个问题?
我在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)
非常感谢帮助!
莱纳斯
我有一个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)
假设您要启动一个新活动并从当前活动传递一些数据.如果数据是基本类型,您可以简单地使用intent并添加额外内容,但是如何为更复杂的数据结构(如arraylists或对象)执行此操作?
我有一个小应用程序,可用于设置未来事件的提醒.该应用程序使用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) 将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项目以及要删除和重建的临时文件.我还试图更新主机应用程序类型库的校验和,它应具有相同的效果.然而,这些修复工具似乎都没有完成这项任务,而且我的想法已经不多了.
我有一个带有多个选项的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.
此行为导致应用程序中的一些不太受欢迎的效果.有没有办法"通过过滤移动选择",即将选中状态绑定到条目而不是列表中的初始位置?或者我需要找到一种新方法吗?
谢谢,
莱纳斯
我需要知道一个字符串是否与许多不同的标准相匹配.我试图通过使用正则表达式来解决这个问题,然后看看它是否匹配(在Java中:str.matches(myRegex);),但是我无法做到正确.
标准如下:
例子:
这可以在一个正则表达式中完成吗?或者应该在代码中完成还是两者结合?
谢谢,
莱纳斯
下面的代码片段显示了一个带有简单登录表单的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)