Java Android小部件按钮根本不工作,如何使其工作?
我会说我对安卓一点经验都没有,以此作为前提 我只是想简单地将textView tv1更新为当按下按钮时从网络上抓取的一些数据,当按下按钮时,现在什么都没有发生,我不知道为什么 以下是我的provider类中必要的方法Java Android小部件按钮根本不工作,如何使其工作?,java,android,mobile,gradle,widget,Java,Android,Mobile,Gradle,Widget,我会说我对安卓一点经验都没有,以此作为前提 我只是想简单地将textView tv1更新为当按下按钮时从网络上抓取的一些数据,当按下按钮时,现在什么都没有发生,我不知道为什么 以下是我的provider类中必要的方法 public static String WIDGET_BUTTON = "com.beninga.android.mobilenexus.WIDGET_BUTTON"; RemoteViews remoteViews; AppWidgetManager appWidgetMana
public static String WIDGET_BUTTON = "com.beninga.android.mobilenexus.WIDGET_BUTTON";
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
Context context;
Player[] players;
private int[] appwidgetIds;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
this.appWidgetManager = appWidgetManager;
this.appwidgetIds = appWidgetIds;
for(int i =0; i < appWidgetIds.length; i++) {
remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);
thisWidget = new ComponentName(context, MobileNexus.class);
this.context = context;
System.out.println("did this run");
remoteViews.setOnClickPendingIntent(R.id.button, getRefreshPendingIntent());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
private PendingIntent getRefreshPendingIntent(){
Intent intent = new Intent(context, getClass());
intent.setAction(WIDGET_BUTTON);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
public void onReceive(Context context, Intent intent) {
appWidgetManager = AppWidgetManager.getInstance(context);
System.out.println(intent.getAction()+ "was recieved");
if (intent.getAction().equals(WIDGET_BUTTON)) {
remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);
remoteViews.setOnClickPendingIntent(R.id.button, getRefreshPendingIntent());
System.out.println("IT GOT CALLED");
String url = findUrl();
new RetrieveData().execute(url);
}
super.onReceive(context, intent);
}
按下按钮时,onclickpending从不触发操作
编辑:我明白了!删除INTERNET代码并执行此操作
PendingIntent pi = PendingIntent.getBroadcast(context,0, in,0);
remoteViews.setOnClickPendingIntent(R.id.button,pi);
并将GetRefreshPending帐篷主体替换为
private PendingIntent getRefreshPendingIntent(){
Intent in = new Intent(WIDGET_BUTTON);
return PendingIntent.getBroadcast(context,0, in,0);
}
显示您的
OnCreate
方法添加了我的OnCreate方法。现在告诉我您基本上想要实现什么?点击按钮会发生什么?我想将我的TextView tv1中显示的文本更改为我从网上抓取的内容。你为什么要使用广播接收器?你收到推送通知了吗?如果没有,那么我认为你走错了方向。要使用web url更新textview,只需一行代码。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_gravity="center"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Loading!"
android:id="@+id/Tv1"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:maxLines="12"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.conifgure_layout);
setResult(RESULT_CANCELED);
context = this;
Bundle extras = getIntent().getExtras();
if(extras != null){
widgetID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);
final EditText et = (EditText) findViewById(R.id.user);
et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// NOTE: In the author's example, he uses an identifier
// called searchBar. If setting this code on your EditText
// then use v.getWindowToken() as a reference to your
// EditText is passed into this callback as a TextView
in.hideSoftInputFromWindow(v
.getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
// Must return true here to consume event
return true;
}
return false;
}
});
final RadioGroup rg = (RadioGroup) findViewById(R.id.checks);
Button b = (Button) findViewById(R.id.finished);
final RadioButton selected = (RadioButton) findViewById(rg.getCheckedRadioButtonId());
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.savePreferences("Username", et.getText().toString());
context.savePreferences("Server", selected.getText().toString());
String url = null;
try {
url = "this is a valid url, "UTF-8");
System.out.println(url);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
new RetrieveData().execute(url);
new MobileNexus()
.onUpdate(context,
AppWidgetManager.getInstance(context),
new int[] { widgetID }
);
AppWidgetManager.getInstance(context).updateAppWidget(widgetID, remoteViews);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetID);
setResult(RESULT_OK, resultValue);
finish();
}
});
}
PendingIntent pi = PendingIntent.getBroadcast(context,0, in,0);
remoteViews.setOnClickPendingIntent(R.id.button,pi);
private PendingIntent getRefreshPendingIntent(){
Intent in = new Intent(WIDGET_BUTTON);
return PendingIntent.getBroadcast(context,0, in,0);
}