-2

주 활동 레이아웃 (R.layout.activity_main) 대신 단편 (R.layout.fragment_2_ble)에 활동 처리 결과를 표시하려고합니다.중첩 된 부분의 findViewById

따라서, 나는 (R.id.devicelist)를 찾을 때 active_main이 아닌 fragment_2_ble에있는 문제가 있습니다.

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) 일을해야한다는 것을 추가 할 것이다

.