0

Я работаю с IBeacon и PagerSlidingTabStrip и я в порядке, чтобы обновить содержимое картыработа с IBeacon и PagerSlidingTabStrip

Я создал класс адаптера питания, чтобы сделать вызывает метод notifyDataSetChanged(), например:

public class SuperAwesomeCardFragment extends Fragment { 

     private static final String ARG_POSITION = "position"; 

     private int position; 

     private ArrayAdapter<Beacon> beaconArrayAdapter; 

     public static SuperAwesomeCardFragment newInstance(int position) { 
      SuperAwesomeCardFragment f = new SuperAwesomeCardFragment(); 
      Bundle b = new Bundle(); 
      b.putInt(ARG_POSITION, position); 
      f.setArguments(b); 
      return f; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      position = getArguments().getInt(ARG_POSITION); 
     } 

     public void replaceWith(Collection<Beacon> newBeacons) { 
      beaconArrayAdapter.clear(); 
      beaconArrayAdapter.addAll(newBeacons); 
      beaconArrayAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

      LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

      FrameLayout fl = new FrameLayout(getActivity()); 
      fl.setLayoutParams(params); 

      final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources() 
        .getDisplayMetrics()); 

      ListView listView = new ListView(container.getContext()); 
      listView.setAdapter(this.beaconArrayAdapter); 
      listView.setLayoutParams(params); 
      listView.setDividerHeight(25); 
      fl.addView(listView); 
      return fl; 
     } 
    } 

Rode также активен, когда значение отображается, но когда я запускаю проект, я получаю следующее сообщение: !!! СРОК ДЕЙСТВИЯ СДЕЛКИ !!! пример:

public class MainActivity extends FragmentActivity { 

    private static final String TAG = MainActivity.class.getSimpleName(); 

    private static final int REQUEST_ENABLE_BT = 1234; 

    private static final Region ALL_ESTIMOTE_BEACONS_REGION = new Region("rid", null, null, null); 

    private BeaconManager beaconManager; 

    private ActionBar actionBar; 

    private PagerSlidingTabStrip tabs; 

    private ViewPager pager; 

    private MyPagerAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.actionBar = getActionBar(); 
     if (this.actionBar != null) { 
      this.actionBar.setDisplayHomeAsUpEnabled(true); 
     } 

     tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
     pager = (ViewPager) findViewById(R.id.pager); 
     adapter = new MyPagerAdapter(getSupportFragmentManager()); 

     pager.setAdapter(adapter); 

     final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() 
       .getDisplayMetrics()); 
     pager.setPageMargin(pageMargin); 

     tabs.setViewPager(pager); 
     // Configure verbose debug logging. 
     L.enableDebugLogging(true); 

     // Configure BeaconManager. 
     beaconManager = new BeaconManager(this); 
     beaconManager.setRangingListener(new BeaconManager.RangingListener() { 
      @Override 
      public void onBeaconsDiscovered(Region region, final List<Beacon> beacons) { 
       // Note that results are not delivered on UI thread. 
       Log.e(TAG, "onBeaconsDiscovered"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Log.e(TAG, "run"); 
         // Note that beacons reported here are already sorted by estimated 
         // distance between device and beacon. 
         if (actionBar != null) { 
          actionBar.setSubtitle("Found beacons: " + beacons.size()); 
         } 
         if (beacons.size() > 1) { 
          adapter.replaceWith(beacons); 
         } 
        } 
       }); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == android.R.id.home) { 
      finish(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onDestroy() { 
     beaconManager.disconnect(); 
     super.onDestroy(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     // Check if device supports Bluetooth Low Energy. 
     if (!beaconManager.hasBluetooth()) { 
      Toast.makeText(this, "Device does not have Bluetooth Low Energy", Toast.LENGTH_LONG).show(); 
      return; 
     } 

     // If Bluetooth is not enabled, let user enable it. 
     if (!beaconManager.isBluetoothEnabled()) { 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
     } else { 
      connectToService(); 
     } 
    } 

    @Override 
    protected void onStop() { 
     try { 
      beaconManager.stopRanging(ALL_ESTIMOTE_BEACONS_REGION); 
     } catch (RemoteException e) { 
      Log.d(TAG, "Error while stopping ranging", e); 
     } 

     super.onStop(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_ENABLE_BT) { 
      if (resultCode == Activity.RESULT_OK) { 
       connectToService(); 
      } else { 
       Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_LONG).show(); 
       if (this.actionBar != null) { 
        this.actionBar.setSubtitle("Bluetooth not enabled"); 
       } 
      } 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

    private void connectToService() { 
     if (this.actionBar != null) { 
      this.actionBar.setSubtitle("Scanning..."); 
     } 

     beaconManager.connect(new BeaconManager.ServiceReadyCallback() { 
      @Override 
      public void onServiceReady() { 
       try { 
        beaconManager.startRanging(ALL_ESTIMOTE_BEACONS_REGION); 
       } catch (RemoteException e) { 
        Toast.makeText(MainActivity.this, "Cannot start ranging, something terrible happened", 
          Toast.LENGTH_LONG).show(); 
        Log.e(TAG, "Cannot start ranging", e); 
       } 
      } 
     }); 
    } 

    public class MyPagerAdapter extends FragmentPagerAdapter { 

     private final String[] TITLES = {"Categories", "Home", "Top Paid", "Top Free", "Top Grossing", "Top New Paid", 
       "Top New Free", "Trending"}; 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return TITLES[position]; 
     } 

     @Override 
     public int getCount() { 
      return TITLES.length; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return SuperAwesomeCardFragment.newInstance(position); 
     } 

     public void replaceWith(Collection<Beacon> newBeacons) { 
      replaceWith(newBeacons); 
     } 
    } 
} 

Я понимаю, что я разрываю доступное пространство, но не понял, как правильно выполнить этот процесс обновления карты. Может ли кто-нибудь объяснить мне, как это сделать, где моя ошибка?

Tnks!

ответ

0

Я понимаю, что я сделал не так! В приведенном выше коде показаны некоторые ошибки, такие как рекурсия метода replaceWith.

Tnks people!

Смежные вопросы