2011-09-24 7 views
2

안녕하세요 저는 텍스트 뷰가있는 Appwidget (위젯)에 데이터를 보내야하는 활동 1이 있습니다.다른 활동에서 App 위젯으로 데이터 가져 오기

우리는 intent.putExtra("mydata", dataString);을 사용할 수 있고 String data = bundle.getString("mydata");과 동일하게 알 수 있습니다.하지만 제 경우에는 응용 프로그램 위젯에 데이터 (String)를 보내야합니다. 난의 AppWidgetProvider 내부

Bundle dataFromPrevious = getIntent().getExtras(); 
String newString = dataFromPrevious.getString("mydata"); 

를 사용하는 경우

그것은 getIntent는 Class 형에 대한 정의되지 않은 말 getIntent에 오류가 발생합니다.

어떻게이 AppWidget 내부에서 문자열을 가져올 수 있습니까? 또한이 텍스트는 활동 1에서 새 문자열로 자주 업데이트되므로이 상황에 대해 SharedPrefrences을 사용하는 것이 좋습니다. 다른 방법이 있습니까?

UPDATE 1 : 요셉 언급 한 바와 같이, 난 내 매니페스트 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 을 추가 한

지금 나는 또한 내에서에서 AppWidget

@Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle getPrevData = intent.getExtras(); 
     String data = getPrevData.getString("mydata"); 
     newdata = data; 
     super.onReceive(context, intent); 
    } 

을 OnRecieve 재정을 만들었습니다 업데이트 있음

views.setTextViewText(R.id.dataWidget,newdata); 

여기 newdatapublic static String입니다.하지만 아무 것도 표시하지 않습니다 !!! 때 위젯에서 textview setTextViewText. 내가 여기서 뭔가를 놓치고 있니? 도와주세요 ...

업데이트 2 :

import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.RemoteViews; 
import android.widget.Toast; 

public class MainWidget extends AppWidgetProvider { 

    private RemoteViews views; 
    public static String newdata 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle getPrevData = intent.getExtras(); 
     String data = getPrevData.getString("mydata"); 
     newdata = data; 

     super.onReceive(context, intent); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

     views = new RemoteViews(context.getPackageName(),R.layout.widget_layout); 
     appWidgetManager.updateAppWidget(appWidgetIds, views); 

     //views.setTextViewText(R.id.dataWidget,newdata); 

     super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 


} 

그리고 이것은 나의 또 다른 activityvthat가 보내는 데이터 :

final String text = ((TextView)findViewById(R.id.textview)).getText().toString(); 
Intent intent = new Intent(FirstActivity.this, MainWidget.class); 
       intent.putExtra("mydata", text); 
+0

한다 라인'String 데이터 = getVerseData.getString ("mydata을"이)'하지'String 데이터 = getPrevData.getString ("다음 mydata"); '대신에? –

+0

또한 방송을 보내기 위해 사용중인 코드를 게시 할 수있는 경우를 대비하여 제공 할 수 있습니다. –

+0

안녕하세요, 스택 오버플로에 잘못 입력했습니다. 실수해서 미안 해요! 더 많은 참조를 위해 완전한 코드로 두 번째 업데이트를 수행 할 것입니다. – Wesley

답변

0

브로드 캐스트 수신기를 사용하지 않고 위젯의 데이터를 업데이트 할 수 있습니다.

  1. sharedPreference에 데이터를 저장하십시오.

  2. 새 데이터를 사용하여 원격 뷰를 만들고 AppWidgetManager.updateWidget을 사용하여 위젯을 업데이트하십시오.

다음은 샘플 코드입니다.

RemoteViews updateViews = buildUpdate(context); // Update the view using the new data. 
ComponentName thisWidget = new ComponentName(context, WidgetClassName.class); 
AppWidgetManager manager = AppWidgetManager.getInstance(context); 
manager.updateAppWidget(thisWidget, updateViews); 

이것은 이전 응용 프로그램에서 수행 한 것입니다.

Saneesh CS

1

당신은 BroadcastReceiver의를 사용해야합니다. 요약하면 에 따라 작동하는 AppWidgetProviderBroadcastReceiver을 추가 한 다음 위젯을 새로 고칩니다. 당신의 Activity에서

은 당신이해야 할 모든 사용자 지정 의도와 방송 (Context.sendBroadcast)를 전송 (그리고 평소에 따라 putExtra으로 Intent에 데이터를 추가 할 수 있습니다).

+0

안녕하세요 Joseph 빠른 답변을 주셔서 감사합니다. 내 IntWindow = new Intent (context.getApplicationContext(), MyBroadcastReceiver.class) 인 AppWidgetProvider에 대한 방송 수신자를 생성 할 수 있었다고 생각한다. \t \t PendingIntent pendingIntent = PendingIntent.getBroadcast (context.getApplicationContext(), 0, myIntent, 0); '이제 MyBroadcastReciever 클래스에서 무엇을해야합니까? "사용자 정의 인 텐트에서 작동하고 위젯을 새로 고칩니다."알람 관리자를 만들 필요가 있습니까? 완전 초보자는 나를 어떻게해서든지 안내 할 수 있니? – Wesley

+0

실제로 활동에서'android.appwidget.action.APPWIDGET_UPDATE' 액션을 사용하여 인 텐트를 브로드 캐스트 할 수 있습니다 (그리고 사용자 정의 BroadcastReceiver는 완전히 피할 수 있습니다). 그런 다음 AppWidgetProvider의'onReceive' 메소드를 오버라이드하고, 인 텐트에서 원하는 모든 엑스트라를 가져온 다음 위젯을 새로 고치는'super.onReceive'를 호출하십시오. –

+0

다시 한 번 감사드립니다. 내 업데이트 된 질문을 참조하십시오. 당신이 언급 한 변화들에 따라 – Wesley

관련 문제