标签: commonsware

为什么不能在片段中使用ViewPager?它实际上是

有信息,这是不可能使用ViewPagerFragment像"许多来源的忙打码机指南Android开发 "由马克·墨菲,或职位像这样的SO.我很困惑,因为我没有这样的问题而且我成功地使用了ViewPager我的内容Fragment.唯一的区别是我实例化了一个ViewPagernot 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)

android android-fragments commonsware android-viewpager

37
推荐指数
2
解决办法
4万
查看次数

开发报警应用

我想开发一个报警应用程序.应用程序应该像这样工作:

  • 发动它
  • 活动告诉我时间
  • 我可以设置闹钟
  • 我可以关闭申请
  • 当闹钟时间到来时,它会启动一个活动(即使设备被锁定)

我已经尝试调整此示例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)

android alarmmanager wakelock commonsware

13
推荐指数
1
解决办法
3616
查看次数

XML属性从合并布局到RelativeLayout通过膨胀

根据这个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)

xml layout user-interface android commonsware

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

如何保持Intent服务的运行

我有两个Intentservice的例子.一个是commonsware书中的下载示例.另一个是http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler.这两个示例都显示了服务执行有限任务,并且它们显然通过运行到onHandleIntent事件范围的末尾来销毁自己.

我写的服务必须有事件和听取事情.一个是LocationListener,用于监听GPS移动.另一个使Posts到REST服务并监听回复.我想让它运行直到一段时间过去,或者直到它被启动它的活动告诉它退出.

我如何让它继续运行?例如,我在哪里放置LocationListener的实现?谢谢,加里

service android commonsware

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

从AlarmManager直接唤醒服务

https://github.com/commonsguy/cwac-wakeful演示中,为响应警报而调用OnAlarmReceiver(BroadcastReceiver)onReceive()方法.onReceive()方法启动服务.使用了两个Intent,一个由BroadcastReceiver接收,另一个由Service接收.这看起来更复杂,为什么不让服务从AlamManager接收Intent?

据我所知,当onReceive()正在执行时,保证Phone不会休眠,即它包含一个唤醒锁定.我不确定Service类是否提供任何类似的保证.

是否可以直接从警报启动服务,同时仍然保证电话将从睡眠中唤醒,并且在获得唤醒锁之前不会睡眠?

android commonsware

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

传递给Intent构造函数时,从事件处理程序传递此类与ClassName.this之间的区别是什么?

在早期的Android编程教程(第192页)中,我们看到了一个实现LunchList#onOptionsItemSelected.在这个实现中,我们看到两个Intent传递给startActivity:一个传递构造函数LunchList.this,另一个传递构造函数this.

有什么不同?

见这里的第78-91行.注意如何onOptionsItemSelected在内部类中声明.

在Android/Java中this,事件处理程序或通过反射进行功能绑定的上下文中是否有变化的价值?两个Intent实例都可以通过this吗?

java android event-handling commonsware

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

无法暂停活动,尚未创建内容视图

我抓住了忙碌编码器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).

注意:我已将countriesframelayout 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).

  1. EU4You - 加载适当的布局(默认或横向大).如果是默认值,则在SherlockListFragment中加载国家/地区列表.如果为landscape-large,则会加载列表和详细信息片段以显示所选国家/地区.
  2. DetailsActivity - 在使用横向大型布局时,通过DetailsFragment加载所选国家/地区.

如果单击列表片段中的国家/地区,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)

android android-fragments commonsware

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

为什么食谱会在看起来不必要的时候推广覆盖getItemViewType和getViewTypeCount?

我一直在使用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)

android android-arrayadapter commonsware android-view

7
推荐指数
1
解决办法
3938
查看次数

使用localbroadcastmanager sendorderedbroadcast的组合发送广播

我想在这篇博客文章中实现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);

service android broadcastreceiver commonsware

7
推荐指数
1
解决办法
3573
查看次数

未经许可不允许启动服务Intent - 发送者未获得权限

我正在阅读 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 commonsware android-permissions

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