2013-01-12 27 views
13

Tôi đang làm việc trên tiện ích ListView nơi tôi muốn người dùng có thể khởi chạy hoạt động khi nhấn ListView. Tôi đã không thể tìm thấy bất kỳ loại hướng dẫn về điều này vì vậy tôi tự hỏi nếu có ai có thể chỉ cho tôi đi đúng hướng hoặc có lẽ chia sẻ một số mã. Tôi muốn khởi động cùng một hoạt động bất kể trong đó ListItem được nhấp vào vì vậy đó không phải là một vấn đề.Hoạt động bắt đầu của Android khi nhấn tiện ích ListView item

Tất cả trợ giúp đều được đánh giá cao!

Trả lời

35

Có giao diện here và cuộn đến tiêu đề phụ Thêm hành vi vào từng mục riêng lẻ.

Bạn cần phải chắc chắn rằng bạn gọi cả setPendingIntentTemplate() từ AppWidgetProvider bạn setOnClickFillInIntent() từ thực hiện RemoteViewsService.RemoteViewsFactory của bạn.

Ví dụ:

public class Widget extends AppWidgetProvider { 

    // ... 

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

     for(int i = 0; i < appWidgetIds.length; i++){ 

      RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget); 

      Intent startActivityIntent = new Intent(context, myActivity.class); 
      PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      widget.setPendingIntentTemplate(R.id.list_view, startActivityPendingIntent); 

      appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 

      // ... 
    } 
} 

public class WidgetAdapter implements RemoteViewsService.RemoteViewsFactory { 

    // ... 

    @Override 
    public RemoteViews getViewAt(int position) { 

    RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_row); 

     Intent fillInIntent = new Intent(); 
     fillInIntent.putExtra(Widget.EXTRA_LIST_VIEW_ROW_NUMBER, position); 
     widgetRow.setOnClickFillInIntent(R.id.list_view_row, fillInIntent); 

     // ... 

     return row; 
    } 
} 

Có một ví dụ thuyết phục hơn trong mẫu StackWidget mà là trong SDK samples, mặc dù tôi thấy nó hơi khó để tìm (xem here cho hướng dẫn). Nó tạo ra một ý định để hiển thị một thông báo Toast, nhưng nó sử dụng cùng một mã.

+0

tôi nghĩ điều này dễ dàng hơn: http://stackoverflow.com/a/20774402/878126 –

+0

Điều duy nhất hiệu quả đối với tôi. Cảm ơn bạn – IHeartAndroid

+0

có vẻ như nó được tất cả các dữ liệu trong ListView vì vậy khi đi đến các hoạt động nó không trả lại chính xác thêm bạn putted. Làm thế nào để giải quyết điều này? – natsumiyu

-8

Để khởi chạy bất kỳ Hoạt động nào bạn tạo Mục đích và sau đó gọi hàm startActivity theo ý định đó. Kiểm tra Intent và startActivity và tôi chắc chắn bạn có thể tự mình làm điều đó.

+0

Tất nhiên tôi biết cách khởi động một hoạt động theo cách thông thường. Tôi đang tự hỏi về cách bạn làm điều đó với một widget ListView kể từ khi PendingIntent bình thường sẽ không hoạt động. – SweSnow

Các vấn đề liên quan