문제

아날로그 시계를 표시하는 위젯이 있습니다. 내가 원하는 것은 위젯이 사용자가 위젯을 클릭 할 때 데이터베이스에 쓰는 것입니다. 이미 DatabaseHelper 클래스를 가지고 있으며 현재 날짜와 시간을 보여주는 화면을 표시하고 데이터베이스에 시간을 씁니다.

여기서 튜토리얼을 따랐습니다. 아날로그 시계 튜토리얼 그리고 이것으로 끝났습니다.

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
    {
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
        this.mIntent = new Intent(context, AskTheTime.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);
        views.setOnClickPendingIntent(R.id.Widget, pendingIntent);

        AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
    }
}

AskThetime 클래스는 활동과 로그를 oncreate ()의 데이터베이스로 확장합니다. 그러나 이것은 위젯이 시작된 시간 만 클릭했을 때만 표시한다는 것을 의미합니다. (나는 이것이 보드 인디언트를 시작했기 때문이라고 생각합니다.) 데이터베이스를 다른 방법에 넣어야하는지 또는 위젯에서 이런 종류의 일을하기 위해 의도를 사용해야하는지 확실하지 않습니다. 어떤 포인터도 좋을 것입니다! 나는 의도에 대한 몇 가지 튜토리얼을보고 있지만 그중 어느 것도 나에게 분명하지 않은 것 같습니다.

도움이 되었습니까?

해결책

위젯을 누르면 OS는 위젯에 설정 한 보류 의도를 활성화합니다.

위젯을 누르면 활동을 시작하는 것처럼 보입니다.

따라서 문제는 위젯을 누르면 AskTime이 이미 생성되었을 수 있다는 것입니다. onCreate() 다시 호출되지 않습니다.

당신이 할 수있는 일은 로그인을 시도하는 것입니다. onstart () 또는 onresume () 대신, 또는 그 외에 onCreate() 당신의 내부 activity.

문서에서 onStart:

활동이 사용자에게 보이게 될 때 호출됩니다.

그리고 onresume :

활동이 사용자와 상호 작용하기 시작할 때 호출됩니다. 이 시점에서 귀하의 활동은 활동 스택의 맨 위에 있으며 사용자 입력이 진행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top