Обработка щелчка по элементу в Widget ListView [Android]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обработка щелчка по элементу в Widget ListView [Android]

Сообщение Anonymous »

Я ищу это уже несколько недель, но не могу найти ответа. Я пытаюсь создать ListView внутри виджета. Мне удалось заполнить ListView. Моя проблема в том, что когда я щелкаю элемент внутри ListView, я хотел открыть действие и передаю идентификатор этого элемента в действие, которое я вызвал. Но, похоже, я не могу правильно получить переданный идентификатор, он всегда равен нулю при переходе к действию, которое я вызывал.

Вот мой код

WidgetProvier

Код: Выделить всё

public class WidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
....
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);

appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listViewWidget);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}

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

private RemoteViews updateWidgetListView(Context context, int appWidgetId) {
//For ListView
Intent svcIntent = new Intent(context, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(appWidgetId, R.id.listViewWidget, svcIntent);
//When item is clicked on ListView
Intent startActivityIntent = new Intent(context, ActivityOne.class);
PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.listViewWidget, startActivityPendingIntent);

return remoteViews;
}
WidgetService

Код: Выделить всё

public class WidgetService extends RemoteViewsService {

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new ListProvider(this.getApplicationContext(), intent));
}
}
ListProvider

Код: Выделить всё

 @Override
public RemoteViews getViewAt(int position) {
final RemoteViews widgetRow = new RemoteViews(
context.getPackageName(), R.layout.list_row);

ListItem listItem = listItemList.get(position);
widgetRow.setTextViewText(R.id.txtID, listItem.id);

//Pass the ID to ActivityOne
Intent fillInIntent = new Intent();
fillInIntent.putExtra("EXTRA_ID", listItem.id);
widgetRow.setOnClickFillInIntent(R.id.llRow, fillInIntent);

return widgetRow;
}
ActivityOne

Код: Выделить всё

public class ActivityOne extends Activity {
String mID;

@Override
protected void onCreate(Bundle savedState) {

....
mID = intent.getStringExtra("EXTRA_ID");
....
}
Я заполняю свой ListView с помощью веб-службы, которая находится внутри моего ListProvider, и вызываю ее в onDataSetChanged >. При его отладке, пока список заполняется, он также помещает все данные в EXTRA_ID, возможно, это было причиной того, что при открытии действия он путается и вместо этого возвращает ноль, Я не знаю, почему, как это исправить. Пожалуйста, подскажите мне, как это решить. Заранее благодарю за помощь.

Подробнее здесь: https://stackoverflow.com/questions/396 ... ew-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»