这些天我正在研究在Android中模拟模态对话框.我已经google了很多,有很多讨论,但很遗憾没有太多的选择来获得它的模态.这里有一些背景,
对话框,模态对话框和Blockin
对话框/ AlertDialogs:如何在对话框启动时"阻止执行"(.NET风格)
没有直接的方法来获得模态行为,然后我想出了3个可能的解决方案,
1.使用对话框主题的活动,就像这个线程所说的那样,但我仍然无法使主要活动真正等待对话活动返回.主要活动转为停止状态,然后重新启动.
2.构建一个工作线程,并使用线程同步.但是,对于我的应用程序来说,这是一个巨大的重构工作,现在我在主UI线程中有一个主要活动和服务.
3.当存在模态对话框时,在循环内接管事件处理,并在对话框关闭时退出循环.实际上,这是构建一个真正的模态对话框的方式,就像它在Windows中的确切做法一样.我仍然没有这样的原型.
我仍然想用一个以对话为主题的活动模拟它,
1.通过startActivityForResult()启动对话活动
2.从onActivityResult()获取结果
这里有一些来源
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView v = new MyView(this);
setContentView(v);
}
private final int RESULT_CODE_ALERT = 1;
private boolean mAlertResult = false;
public boolean startAlertDialog() {
Intent it = new Intent(this, DialogActivity.class);
it.putExtra("AlertInfo", "This is an alert");
startActivityForResult(it, RESULT_CODE_ALERT);
// I want to wait right here
return mAlertResult;
}
@Override
protected void onActivityResult (int requestCode, int resultCode, …Run Code Online (Sandbox Code Playgroud) 有没有办法在非UI线程中进行UI更改?简短的问题.
我正在尝试将Spinner自定义为多选.我已经成功地使它可以多选,但是当重新选择一个项时,微调器内部的视图不会更新.
当一个项目重新被选中时Spinner,getView()我的SpinnerAdapter被调用产生了View我想要它的东西,但是View不知怎的,它不会被显示出来.我已经完成了调试器中的所有操作,并且在选择不同的项目或重新选择相同的项目时,我找不到任何差异.我已经浏览了所有的代码Spinner AbsSpinner,AdapterView而且我找不到可能导致这种情况的原因.
微调器有6个项目:选择1-6.微调器起源于未选中的所有项目. 选择选项1,2和4.微调器内的视图正确显示"选择1,选择2,选择4".

选择4未被选中(就Spinner而言,重选).从列表中正确取消选中选项4,但微调器内的视图不会更新. 它仍然显示"选择1,选择2,选择4".单步执行调试器,我的SpinnerAdapter上的getView()会被调用.出于某种原因,View实际上并未显示.

选择2未被选中(这不是对Spinner的"重新选择").这里的一切都按预期运作.列表项和Spinner内的视图都会更新.

public class MultiSelectSpinner extends Spinner {
private OnItemSelectedListener listener;
public MultiSelectSpinner(Context context) {
super( context );
}
public MultiSelectSpinner(Context context, AttributeSet attrs) {
super( context, attrs );
}
public MultiSelectSpinner(Context context, AttributeSet attrs, int defStyle) {
super( context, attrs, defStyle );
}
@Override
public void setSelection( int position ) { …Run Code Online (Sandbox Code Playgroud) 如何设置From和To Timestamp标记并在音频文件的这两个点之间播放媒体?我没有在Android中看到MediaPlayer的监听器API.想知道如何实现这一目标?
我的情况是这样的:将音频文件分成许多这样的部分,让用户按照自己的意愿交互式播放/重放选择部分.
例如,假设一个小的音频文件被分成3个部分(A --- B --- C --- D),即AB,BC和CD.用户选择BC部分并选择播放.然后音频从B点开始播放并在到达C点时停止.用户可以再次播放BC部分或选择继续下一部分.
虽然更容易决定找出起点并使用mediaPlayer.seekTo(int)API,但我怎么能让音频停在终点?这方面最好的方法是什么?
非常感谢您的帮助.
我有一个线程,每六秒钟就会向数据库发送一次GPS坐标,并且我会检查用户是否在一个已定义的区域内.如果用户不在该位置,我想要一个警告对话框,通知他们他们超出范围,如果他们在该区域内,我想要一个告诉他们在范围内的对话框.我检查工作正常,但我已经尝试过,我很确定我无法在后台线程上添加对话框.我已经阅读了一些关于使用处理程序的内容,但我不确定如何实现它.如果您有任何建议我会很感激!谢谢.
这是我FindLocation.java从主要活动(MainActivity.java)调用的方式:
new FindLocation(getBaseContext()).start(usr_id1); //sends a user id with it
Run Code Online (Sandbox Code Playgroud)
下边是 FindLocation.java
public class FindLocation extends Thread {
public boolean inJurisdiction;
public boolean AlertNotice = false;
private LocationManager locManager;
private LocationListener locListener;
Context ctx;
public String userId;
public FindLocation(Context ctx) {
this.ctx = ctx;
}
public void start(String userId) {
this.userId = userId;
super.start();
}
@Override
public void run() {
Looper.prepare();
final String usr = userId;
//get a reference to the LocationManager
locManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE); …Run Code Online (Sandbox Code Playgroud) 我在android中实现了一个线程,每1秒刷新一次片段(一些文本列表).
它在线程调用fragment方法时给出运行时错误.这是我的代码
public class RunThreadExtended extends Activity implements Runnable
{
public void run() {
while(true)
{ try {
Thread.sleep(1000);
AndroidListFragmentActivity.strup++;
MyListFragment1 fragmentB = (MyListFragment1)getFragmentManager().findFragmentById(R.id.fragment1);
fragmentB.updatefrag();
} catch (InterruptedException e) {
e.printStackTrace();
}
}}}
Run Code Online (Sandbox Code Playgroud)
如果我从Mainactivity调用片段方法,一切都可以工作,因为我需要在背景中每隔5秒刷新一次我已经实现的线程,但是它没有工作..pls建议解决方案......