-2

メインアクティビティレイアウト(R.layout.activity_main)ではなく、フラグメント(R.layout.fragment_2_ble)にアクティビティ処理の結果を表示しようとしています。ネストされたフラグメントのfindViewById

したがって、私は、(R.id.devicelist)を見つけようとしているときに問題があります。これはfragment_2_bleにあり、activity_mainにはありません。

MainActivity.java:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    //setButtonText(); 

    ble_device_list_adapter = new ListAdapter(); 

    ListView listView = (ListView) this.findViewById(R.id.deviceList); 
    listView.setAdapter(ble_device_list_adapter); 

    ble_scanner = new BLEScanner(); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      if (ble_scanning) { 
       ble_scanner.stopScanning(); 
      } 

      BluetoothDevice device = ble_device_list_adapter.getDevice(position); 
      if (toast != null) { 
       toast.cancel(); 
      } 
      Intent intent = new Intent(MainActivity.this, PeripheralControlActivity.class); 
      intent.putExtra(PeripheralControlActivity.EXTRA_NAME, device.getName()); 
      intent.putExtra(PeripheralControlActivity.EXTRA_ID, device.getAddress()); 
      startActivity(intent); 

     } 
    }); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

    displaySelectedScreen(R.id.nav_data); 

    //ButterKnife.bind(this); 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    boolean logged = prefs.getBoolean("logged", false); 
    if (!logged) { 
     //Launch login activity 
     Intent intent = new Intent(this, LoginActivity.class); 
     startActivity(intent); 
    } 
} 

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

private void displaySelectedScreen(int itemId) { 

    //creating fragment object 
    Fragment fragment = null; 

    //initializing the fragment object which is selected 
    switch (itemId) { 
     case R.id.nav_data: 
      fragment = new DataFragment(); 
      break; 
     case R.id.nav_BLE: 
      fragment = new BLEFragment(); 
      break; 
     case R.id.nav_settings: 
      fragment = new SettingsFragment(); 
      break; 
    } 

    //replacing the fragment 
    if (fragment != null) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.content_frame, fragment); 
     ft.commit(); 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
} 


@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    displaySelectedScreen(item.getItemId()); 
    return true; 
} 

BLEFragment.java:

public class BLEFragment extends Fragment { 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    //returning our layout file 
    return inflater.inflate(R.layout.fragment_2_ble, container, false); 
} 

この問題を解決する方法上の任意のアイデア?あなたがのインスタンスを持つことになり

メインで次に
public ListView getListView(){ 
    return YOURLISTVIEW; 
} 

:あなたはこのようなメソッドを作成することができ、あなたのフラグメントの内部

YOURLISTVIEW = (ListView) view.findViewById(R.id.deviceList); 

:あなたはこのような何かを持っていますonCreateView()あなたの断片で

+0

なぜあなたは断片化されているときにアクティビティでListViewを取得したいですか?代わりにそれを断片的に扱う。 – tahsinRupam

答えて

1

私はあなたが断片についての概念が欠落していると思います。 listViewがフラグメント内にある場合は、findViewByIdを作成し、フラグメント内にOnClickListenerを設定する必要があります。ちょうどこのように:

public class BLEFragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     //returning our layout file 
     View view = inflater.inflate(R.layout.fragment_2_ble, container, false); 
     ListView list = (ListView) view.findViewById(R.id.your_id); 
     list.setOnClickListenre(...); 
     return view; 
    } 
} 
0

あなたの断片。

フラグメントからListViewにアクセスできます。

myFragment.getListView(); 

私はfindViewById(R.id.fragmentITEM)が働く必要があることを、この活動は、フラグメントの親である場合は、その追加されます。

0

デフォルトでは、この種の構造を実現することはできません。作成時のアクティビティーでフラグメントUIエレメントを見つけることはできません。

アクティビティで作成されたonCreateビューの場合、BecozフラグメントのUI要素が作成されません。

あなたは、このリンクに簡単な答えを見つけることができます:Is it possible to access fragment's UI elements from activitiy's onCreate

関連する問題