2

私のFragmentクラスでは、これが私のRecyclerViewにアイテムを追加する方法です。サービスクラスを使用してRecyclerViewにアイテムを追加する

 @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.online_devices, container, false); 

      recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
      linearLayoutManager = new LinearLayoutManager(getActivity().getBaseContext()); 
      recyclerView.setLayoutManager(linearLayoutManager); 
      recyclerView.setHasFixedSize(true); 

      theDataList = new ArrayList<>(); 
      theRecyclerAdpater = new TheRecyclerAdapter(getActivity().getBaseContext(), theDataList); 

      recyclerView.setItemAnimator(new DefaultItemAnimator()); 
      recyclerView.setAdapter(theRecyclerAdpater); 

      TheData a = new TheData("01","another value","another value","another value","another value"); 
         theDataList.add(a); 
        a = new TheData("02","another value","another value","another value","another value"); 
         theDataList.add(a); 
      theRecyclerAdpater.notifyDataSetChanged(); 

      return view; 
     } 

しかし、私はServiceを経由して私のRecyclerViewに項目を追加したい場合はUIはありますか?つまり、Serviceはバックグラウンドで実行されており、RecyclerViewAvailableの場合、Main UIのアプリケーションの場合は、アイテムを追加します。それ以外の場合はアイテムを追加しません。誰でもどのように私はそれを行うことができますか?今の

、私は、私はちょうどこれをしようとしたが動作していない私のService

@Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate(){ 
     //Add an Item here to RecyclerView if the UI is Available. 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

UPDATE でこれを持っています。私のサービスで

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.online_devices, container, false); 

     recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
     linearLayoutManager = new LinearLayoutManager(getActivity().getBaseContext()); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setHasFixedSize(true); 

     theDataList = new ArrayList<>(); 
     theRecyclerAdpater = new TheRecyclerAdapter(getActivity().getBaseContext(), theDataList); 

     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(theRecyclerAdpater); 

     getActivity().startService(new Intent(getActivity(),MyService.class)); 
     bus.register(this); 

     return view; 
    } 

      @Subscribe 
      public void getMessage(String s) { 
       TheData a = new TheData(s); 
       theDataList.add(a); 
       theRecyclerAdpater.notifyDataSetChanged(); 
      } 

@Override 
public void onCreate(){ 
    bus.post("PP"); 
} 
+0

'LocalBroadcastReceiver'を使用 – Gaurav

+1

[アクティビティとサービス間の通信]の複製が可能ですか?(http://stackoverflow.com/questions/20594936/communication-between-activity-and-service) – Jin

答えて

0

あなたは多くのオプションがありますが、最も興味深いものがEventBus経由recyclerViewを更新することである(例えば、Otto用:

書き込み、このアプリの内部のGradleファイル。

dependencies { 
    compile 'com.squareup:otto:1.3.8' 
} 

あなたのアプリケーション内で宣言してください(dagger2をavo ID静的)

public static Bus bus = new Bus(ThreadEnforcer.MAIN); 

その後、 (リサイクル業者が宣言されている)あなたの活動内部の受信方法を作成して、あなたの活動ののonCreateメソッドに登録:

@Subscribe 
public void getMessage(String s) { 
    adapter.addItem(s); // suppose adapter is recyclerAdapter 
} 

//requires a registration e.g. in the onCreate method 
//bus is your static variable declared in Application class. 
bus.register(this); 

そして、サービスコールのあなたのonCreateメソッド内:

+0

ライブラリを使用していますか?ライブラリなしではいかがですか? –

+0

BroadCastReceiverを使用しますが、この作業は複雑で、より多くのコーディングが必要です。 –

+0

私はこの機能で動作させることはできません。あなたはライブラリでこれをどうやって行うことができますか? –

0

この質問は不適切です。あなたが本当に求めているのは、あなたのサービスからあなたの活動/断片(おそらくIO集約的なデータや何かを読み込んでいるもの)にデータを伝達する方法です。それに応じて、activity/fragmentはそれに従ってアダプタとUIを更新できます。

他の多くはSOあり、たとえば、これに答える質問:まず最初はまず、Ottoが今減価償却される

How to have Android Service communicate with Activity

Communication between Activity and Service

1

、私はEventBusにそれを変更しなければなりませんでした。私は再びそれを尋ねなければならなかった、ありがとうyou。これは私がやったことです。

は私の断片クラス

/*I had to import*/ 
import org.greenrobot.eventbus.EventBus; 
import org.greenrobot.eventbus.Subscribe; 
import org.greenrobot.eventbus.ThreadMode; 


public static class MyFragment extends Fragment { 

    RecyclerView recyclerView; 
    LinearLayoutManager linearLayoutManager; 
    static TheRecyclerAdapter theRecyclerAdpater; 
    private List<TheData> theDataList; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     EventBus.getDefault().register(this); //Register it first 

     View view = inflater.inflate(R.layout.online_devices, container, false); 

     recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
     linearLayoutManager = new LinearLayoutManager(getActivity().getBaseContext()); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setHasFixedSize(true); 

     theDataList = new ArrayList<>(); 
     theRecyclerAdpater = new TheRecyclerAdapter(getActivity().getBaseContext(), theDataList); 

     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(theRecyclerAdpater); 

     getActivity().startService(new Intent(getActivity(),MyService.class)); //I call the Service 

     return view; 
    } 

    //Subscribe, run it on UI 
    @Subscribe(threadMode = ThreadMode.MAIN) 
    public void onEvent(TheData data){ 
     TheData a = new TheData(data.getPc_number()); 
     theDataList.add(a); 
     theRecyclerAdpater.notifyDataSetChanged(); 
    } 
} 

では、私のサービスクラス

public class ServerHelperService extends Service { 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate(){ 
     EventBus.getDefault().post(new TheData("OK")); //and This 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_NOT_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 
} 

compile 'org.greenrobot:eventbus:3.0.0'をGradleのために追加され、それが行われています。それでも読んでいるのはguideです。助けてくれてありがとう!

関連する問題