[英]how to find which button has been clicked in app widgets in android?
I want to design simple app widget which has two textview and two button for previous/next.我想设计简单的应用程序小部件,它有两个 textview 和两个用于上一个/下一个的按钮。 I am getting difficult to handle button click in app widget.
我越来越难以处理应用程序小部件中的按钮单击。 Actually my desire is,if user click on previous button i want to show previous value and if user click on Next button i want to show next value from database.
实际上我的愿望是,如果用户单击上一个按钮我想显示以前的值,如果用户单击下一步按钮我想显示数据库中的下一个值。 How to know which button is clicked?
如何知道点击了哪个按钮? here i register button click listener like this
在这里我像这样注册按钮点击监听器
public static class UpdateWidgetService extends IntentService {
public UpdateWidgetService() {
super("UpdateWidgetService");
}
@Override
protected void onHandleIntent(Intent intent) {
AppWidgetManager appWidgetManager = AppWidgetManager
.getInstance(this);
int incomingAppWidgetId = intent.getIntExtra(EXTRA_APPWIDGET_ID,
INVALID_APPWIDGET_ID);
if (incomingAppWidgetId != INVALID_APPWIDGET_ID) {
updateOneAppWidget(appWidgetManager, incomingAppWidgetId);
}
}
private void updateOneAppWidget(AppWidgetManager appWidgetManager,
int appWidgetId) {
DatabaseManager dbManager = new DatabaseManager(this);
dbManager.open();
String contactNumber, date, status, message;
ArrayList<QueuedMessage> listOfQuedMessage = (ArrayList<QueuedMessage>) dbManager
.fetchContactNumber();
if (listOfQuedMessage.size() == 0)
Log.i("Db", "null");
else{
date = dbManager.fetchDate();
message = dbManager.fetchMessage();
status = dbManager.fetchStatus();
dbManager.closeDatabase();
RemoteViews views = new RemoteViews(this.getPackageName(),
R.layout.schdulesms_appwidget_layout);
views.setTextViewText(R.id.to_appwidget_saved_data,
listOfQuedMessage.get(count).contacNumber);
views.setTextViewText(R.id.date_appwidget_saved_data, date);
views.setTextViewText(R.id.status_appwidget_saved, status);
views.setTextViewText(R.id.message_appwidgset_saved_data, message);
**//here i want do**
if(button1){
btnNxtClick(views, appWidgetId,listOfQuedMessage.size());
}else{
btPrevClick(views, appWidgetId, listOfQuedMessage.size());
}
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
private void btnNxtClick(RemoteViews views, int appWidgetId,int sizeOfList) {
Intent btnNextIntent = new Intent(this, this.getClass());
btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
0, btnNextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btnNext, btnNextPendingIntent);
}
private void btPrevClick(RemoteViews views, int appWidgetId,int sizeOfList) {
Intent btnNextIntent = new Intent(this, this.getClass());
btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
0, btnNextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btnPrev, btnNextPendingIntent);
}
}
can anyone help me out from this problem??谁能帮我解决这个问题?? thanks
谢谢
know which button is clicked follow these Steps:知道单击了哪个按钮,请按照以下步骤操作:
step 1: Register two reciver for btnNext and btnPrev第一步:为btnNext和btnPrev注册两个reciver
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_NEXT"/>
<action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_PREV"/>
</intent-filter>
step 2: for btnNext and btnPrev action strings:第 2 步:对于 btnNext 和 btnPrev 操作字符串:
public class MyWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_CLICK_NEXT = "Action_nextbtn";
public static String ACTION_WIDGET_CLICK_PREV = "Action_prevbtn";
}
step 3: In onReceive第 3 步:在 onReceive 中
@Override
public void onReceive(Context paramContext, Intent paramIntent)
{
String str = paramIntent.getAction();
if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_NEXT)) {
updateWidgetState(paramContext, str);
}
if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_PREV)) {
updateWidgetState(paramContext, str);
}
}
step 4: Make a method for update widget states:第 4 步:创建更新小部件状态的方法:
static void updateWidgetState(Context paramContext, String paramString)
{
RemoteViews localRemoteViews = buildUpdate(paramContext, paramString);
ComponentName localComponentName = new ComponentName(paramContext, MyWidget.class);
AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
}
Step 5:第 5 步:
private static RemoteViews buildUpdate(Context paramContext, String paramString)
{
rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layout);
Intent activebtnnext = new Intent(paramContext, MyWidget.class);
active.setAction(ACTION_WIDGET_CLICK_NEXT);
PendingIntent configPendingIntentnext = PendingIntent.getBroadcast(paramContext, 0, activebtnnext , 0);
rmViews.setOnClickPendingIntent(R.id.btnNext, configPendingIntentnext);
Intent activeprevbtn = new Intent(paramContext, MyWidget.class);
active.setAction(ACTION_WIDGET_CLICK_PREV);
PendingIntent configPendingIntentprev = PendingIntent.getBroadcast(paramContext, 0, activeprevbtn , 0);
rmViews.setOnClickPendingIntent(R.id.btnprev, configPendingIntentprev);
if(parmString.equals(ACTION_WIDGET_CLICK_NEXT))
{
//
}
if(parmString.equals(ACTION_WIDGET_CLICK_PREV))
{
//
}
return rview;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.