有信息,这是不可能使用ViewPager
内Fragment
像"许多来源的忙打码机指南Android开发 "由马克·墨菲,或职位像这样的SO.我很困惑,因为我没有这样的问题而且我成功地使用了ViewPager
我的内容Fragment
.唯一的区别是我实例化了一个ViewPager
not in onCreateView()
方法而不是in onActivityCreated()
.一切都很好.
所以问题是 - 可能是我只是不知道某些事情,并且出于某些原因不推荐这样做以进行UI实例化onActivityCreated()
?但又一次 - 一切正常.
这是类和xml的列表:
public class ViewPagerFragment extends Fragment {
static final int NUM_ITEMS = 2;
private ViewPagerAdapter mAdapter;
private ViewPager mPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.view_pager_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new ViewPagerAdapter(getFragmentManager());
mPager = (ViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public …
Run Code Online (Sandbox Code Playgroud) 我想开发一个报警应用程序.应用程序应该像这样工作:
我已经尝试调整此示例https://github.com/commonsguy/cwac-wakeful但是在闹钟时间到来时我无法启动活动.
我使用此代码来设置警报(对于测试我已将此代码插入onCreate
到活动方法中):
Intent intent = new Intent(this, OnAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, cal.getTimeInMillis(),
pendingIntent);
Run Code Online (Sandbox Code Playgroud)
这是OnAlarmReceiver类:
public class OnAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(ClockActivity.LOG_TAG, "OnAlarmReceiver::onReceive");
WakefulIntentService.sendWakefulWork(context, AlarmService.class);
}
}
Run Code Online (Sandbox Code Playgroud)
这是服务类:
public class AlarmService extends WakefulIntentService {
public AlarmService(String name) {
super(name);
}
@Override
protected void doWakefulWork(Intent intent) {
Log.i(ClockActivity.LOG_TAG, …
Run Code Online (Sandbox Code Playgroud) 根据这个CommonsWare示例,我设法将我的RelativeLayout子类与我在xml布局中描述的具有合并根的布局合并.我唯一担心的是我无法在xml中描述我的RelativeLayout参数.
我的xml布局:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:my="http://schemas.android.com/apk/res/hu.someproject"
android:layout_width="36dp"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:width="36dp" >
<RelativeLayout
android:id="@+id/upper_container"
style="?pretty_style"
android:layout_alignLeft="@+id/image_title"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/image_title"
android:layout_centerHorizontal="true" >
<View
android:id="@+id/upper_indicator"
android:layout_width="fill_parent"
android:layout_height="5dp"
android:layout_alignParentTop="true"
android:background="@color/mycolor" />
<TextView
android:id="@+id/text_degree"
style="?pretty_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="23°" />
</RelativeLayout>
<hu.MyView
android:id="@+id/image_title"
style="?my_image_title"
android:layout_below="@+id/upper_container"
android:layout_centerHorizontal="true"
my:myColor="#2f8741"/>
Run Code Online (Sandbox Code Playgroud)
我认为问题是合并标签的子节点发生合并,而不是合并本身.任何想法如何在合并中获取我的参数以影响我的RelativeLayout?
我的RelativeLayout子类,没有包声明和导入:
public class MyRelativeLayoutSubclass extends RelativeLayout {
public MyRelativeLayoutSubclass(Context context) {
super(context);
initTile(null);
}
public MyRelativeLayoutSubclass(Context context, AttributeSet attrs) {
super(context, attrs);
initTile(attrs);
}
public MyRelativeLayoutSubclass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle); …
Run Code Online (Sandbox Code Playgroud) 我有两个Intentservice的例子.一个是commonsware书中的下载示例.另一个是http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler.这两个示例都显示了服务执行有限任务,并且它们显然通过运行到onHandleIntent事件范围的末尾来销毁自己.
我写的服务必须有事件和听取事情.一个是LocationListener,用于监听GPS移动.另一个使Posts到REST服务并监听回复.我想让它运行直到一段时间过去,或者直到它被启动它的活动告诉它退出.
我如何让它继续运行?例如,我在哪里放置LocationListener的实现?谢谢,加里
在https://github.com/commonsguy/cwac-wakeful演示中,为响应警报而调用OnAlarmReceiver(BroadcastReceiver)onReceive()方法.onReceive()方法启动服务.使用了两个Intent,一个由BroadcastReceiver接收,另一个由Service接收.这看起来更复杂,为什么不让服务从AlamManager接收Intent?
据我所知,当onReceive()正在执行时,保证Phone不会休眠,即它包含一个唤醒锁定.我不确定Service类是否提供任何类似的保证.
是否可以直接从警报启动服务,同时仍然保证电话将从睡眠中唤醒,并且在获得唤醒锁之前不会睡眠?
在早期的Android编程教程(第192页)中,我们看到了一个实现LunchList#onOptionsItemSelected
.在这个实现中,我们看到两个Intent
传递给startActivity
:一个传递构造函数LunchList.this
,另一个传递构造函数this
.
有什么不同?
见这里的第78-91行.注意如何onOptionsItemSelected
在内部类中声明.
在Android/Java中this
,事件处理程序或通过反射进行功能绑定的上下文中是否有变化的价值?两个Intent
实例都可以通过this
吗?
我抓住了忙碌编码器Android开发4.2指南中演示的EU4You示例项目(由Mark Murphy提供,也就是StackOverflow上的commonsware).跟随此示例项目可能更容易,但我将尝试在问题中发布相关的代码部分.您还需要导入ActionBarSherlock项目.您还需要将Java编译器设置为1.6(以允许@Override注释).
注意:我已将min-sdk更改为8(2.3,Froyo),将target-sdk更改为16(4.1,Ice Cream Sandwich).
注意:我已将countries
framelayout id 更改为framelayout id left_pane
并将其details
更改为right_pane
.
主要布局文件(layout-large-land):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/left_pane"
android:layout_weight="30"
android:layout_width="0px"
android:layout_height="fill_parent"
/>
<FrameLayout
android:id="@+id/right_pane"
android:layout_weight="70"
android:layout_width="0px"
android:layout_height="fill_parent"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
主要布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_pane"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
示例应用程序的原始版本有两个活动(准确地说是SherlockFragmentActivities).
如果单击列表片段中的国家/地区,EU4You(主要托管活动)将检查DetailsFragment的存在和可见性.如果存在,则会在该片段内加载国家/地区网站.如果没有,它将触发DetailsActivity,然后处理添加DetailsFragment(然后加载给定国家/地区的网站).
这很好用,就像在平板电脑和手机上支持多种屏幕布局的典型应用程序一样.
我的问题是我想删除DetailsActivity并坚持一个活动.每当我不在大型横向布局中时,我想用详细信息片段替换(替换)列表片段(换句话说,我要么是在平板电脑上的纵向布局,要么是在任何方向的手机上).所以我所做的,改变了EU4You SherlockFragmentActivity中的以下内容:
原文(对注释中提到的framelayout名称进行了轻微的命名修改......国家是left_pane,详情是right_pane):
@Override
public void onCountrySelected(Country c) {
String url=getString(c.url); …
Run Code Online (Sandbox Code Playgroud) 我一直在使用Commonsware Android编程教程和教程5,额外的功劳2,挑战是使用多个布局在ListView中显示行,具体取决于对象的"类型名称"(餐厅的"类型"属性,这是一个字符串).因此,它表明压倒一切getItemViewType
,并getViewTypeCount
在自定义ArrayAdapter.此外,Android文档和其他在线食谱或博客文章也提出了相同的建议.
在这种情况下,遵循此配方并覆盖这两种方法可以正常工作,但会导致基于检查该Restaurant"type"属性值的冗余逻辑.例如(请注意,此适配器是一个内部类,并且restaurants
是声明为外部Activity成员的Restaurant对象的ArrayList):
class RestaurantsAdapter extends ArrayAdapter<Restaurant> {
private static final int ROW_TYPE_DELIVERY = 0;
private static final int ROW_TYPE_TAKE_OUT = 1;
private static final int ROW_TYPE_SIT_DOWN = 2;
RestaurantsAdapter() {
super(LunchListActivity.this, android.R.layout.simple_list_item_1, restaurants);
}
public int getViewTypeCount() {
return 3;
}
public int getItemViewType(int position) {
String type = restaurants.get(position).getType();
if (type == "delivery") {
return ROW_TYPE_DELIVERY;
} else if (type == "take_out") {
return ROW_TYPE_TAKE_OUT;
} …
Run Code Online (Sandbox Code Playgroud) 我想在这篇博客文章中实现CommonsWare所描述的内容:http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html.这篇文章很有意义,我可以在这里浏览示例源代码:https://github.com/commonsguy/cw-advandroid/tree/master/Broadcast.
我很好奇的是,如果LocalBroadcastManager.getInstance(UnzipService.this).sendBroadcast(broadcast);
您在清单中定义的类型的广播接收器仍然会接收到服务内部的呼叫.
如果我问的不清楚,我想要做的是使用LocalBroadcastManager,因为我的服务的广播不一定需要在系统范围内看到,如果可能,我宁愿保持私有,但是如果用户关闭我的应用并且服务仍在运行,我也想显示通知.有没有办法结合这两种功能而不在服务内部发送两次广播?
(我不想做什么)像:
LocalBroadcastManager.getInstance(UnzipService.this).sendBroadcast(broadcast);
sendOrderedBroadcast(broadcast);
我正在阅读 Mark Murphy 的优秀 Commonsware 书籍 - 但需要消化的内容很多。我构建了“FakePlayer”应用程序(假装是一个 mp3 播放器)。它包含一项服务。作为学习经验,我尝试编写一个简单的应用程序(只有一个按钮),其单击处理程序执行以下操作:
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
Run Code Online (Sandbox Code Playgroud)
它工作正常 - 服务启动正常。我注意到 Eclipse 抱怨该服务没有权限,因此我通过添加 2 行 android:permissions 和 android:exported 更新了服务的清单:
<service
android:name="MyPlayerService"
android:permission="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION"
android:exported="true"
<intent-filter>
<action android:name="com.example.fakeplayer.MyPlayerService"></action>
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
我在 Eclipse 下使用“调试”将播放器应用程序重新加载到设备上(我使用的是 Galaxy S2)。这似乎有效;入门应用程序导致了权限异常,这是我所期望的。
然后,我将其添加到入门应用程序的清单中(以授予其权限):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
Run Code Online (Sandbox Code Playgroud)
我将入门应用程序重新加载到设备上(在 Eclipse 下使用调试)。在启动应用程序中仍然出现权限错误。
我从设备中删除了这两个应用程序并重新安装(使用调试...),首先是服务应用程序,然后是启动程序。仍然出现烫发错误。
我正在阅读 Murphy 先生的高级 Android 书籍中的“如何使用远程服务”部分,因此我意识到这可能不是跨应用程序工作的最佳方式。
我做了一个“adb shell dumpsys package”,找到了启动应用程序,发现它有“permissionsFixed=false”并且没有“grantedPermissions”部分。我认为这意味着入门应用程序中的清单更改未能成功将烫发添加到应用程序中。但我不知道为什么。作为一种学习经历,到目前为止它只产生了混乱......
任何线索都非常感谢!谢谢!
android ×10
commonsware ×10
service ×2
alarmmanager ×1
android-view ×1
java ×1
layout ×1
wakelock ×1
xml ×1