2014-12-15 2 views
1

BaseAdapter를 확장하는 CustomAdapter 클래스를 크레이 티드했습니다. 따라서 클래스를 Fragment로 확장 할 수 없습니다.FragmentManager 클래스를 non-Fragment 클래스로 사용하는 방법

CustomAdapter 클래스에서 나는 사용자 정의 ListView을 항목과 함께 만듭니다. Uppon 버튼을 클릭하여 다른 Fragment를 가고 싶습니다.

CustomAdapter 클래스가 MyLocationFragment.java에서 초기화되고 있습니다. 이 Fragment에서는 사용자가 ListView에서 항목을 선택하도록 사용자에게 제안하고, 사용자가 TextView/Item 옆에있는 Button을 클릭하면 HomeScreenFragment로 이동하여 TextView에서 저장된 값으로 무언가를 수행하려고합니다. (같은 위치에) 속했다.

MyLocationFragment (이 경우 중요 부품, 그렇지 않으면 너무 큰) : (리스너가 오면 부분적으로)

if(adminMode) { 
      ArrayList<String> data = new ArrayList<>(Arrays.asList(locationsArray)); 
      CustomAdapter adapter = new CustomAdapter(data, getActivity()); 

      // Assign adapter to ListView 
      listView.setAdapter(adapter); 

     } 

CustomAdapter.java :

holder.localData.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     fMyLocation = new MyLocationFragment(); 
     // Store selected values into Strings and pass them to setter method 
     String selectedLocation = (String) holder.items.getText().toString(); 
     String [] locationsArrayValues = v.getResources().getStringArray(R.array.locations_array_value); 
     String selectedLocationUrl = locationsArrayValues[position]; 
     fMyLocation.setInputLocation(selectedLocation); 
     fMyLocation.setInputLocationUrl(selectedLocationUrl); 

     FragmentActivity myContext; 

     // On Item Click, go to the HomeScreen 
     Fragment fragment = new HomeScreenFragment(); 
     FragmentManager fManager = myContext.getSupportFragmentManager(); 
     FragmentTransaction fTransaction = fManager.beginTransaction(); 
     fTransaction.replace(R.id.fragment_holder, fragment); 
     fTransaction.commit(); 






    } 
}); 

위 코드 결과는 Cannot Resolve getFragmentManager();

non-Fragment 클래스에서 HomeScreenFragment으로 갈 수 있습니까?

도움이 될 것입니다.

+0

어댑터에서 호출 한 활동에 전달할 오브젝트를 요구하는 메소드를 작성할 수 있습니다. 메소드는 어댑터에서 호출하여 활동의 새 부분을 시작합니다. 안드로이드 4.2 이상에서 중첩 된 단편 지원이 있지만 앱에서 그런 방식으로 약 30 %의 안드로이드 사용자를 차단합니다. –

+0

정확하게 이해했는지 확실하지 않습니다. 그러나 더 쉬운 방법은 없습니까? ListViews 많이 사용되는, 그들은 내부 조각 또는 무엇을 사용하지 않는 것을 의미합니까? 이에 대한 자습서를 찾을 수 없습니다. ListView에서 Button Click을 클릭하고 다른 Fragment를 사용하여 값을 저장하고 싶습니다. –

+0

지원 라이브러리를 사용하여 getChildFragmentManager에 액세스 할 수도 있지만 개인적으로 GUI에서 시각적으로 무엇인가를 실제로 중첩하는 경우에만 중첩 된 조각을 사용해야한다고 생각합니다. 사실, 위의 방법은 1. 활동에 대한 메소드 생성 2. Adapter에 액티비티 전달 (SoftReference 사용) 3. call activity(). yourMethod (yourObject) 4. 새 액티비티/프래그먼트 열기 –

답변

0

당신이해야 할 일은 BaseAdapter을 구현하는 클래스에서 Context에 대한 필드를 만들고 그 대신에 사용하는 것입니다. 해당 필드의 초기화는 생성자를 통해 수행됩니다.

+0

CustomAdapter에 필드 컨텍스트가 있음 그러나 이것은 내가 필요한 것을 달성하는 데 도움이되지 않습니다. 'context.getFragmentManager()'를 추가하면 아무 일도 일어나지 않습니다. 컨텍스트가 CustomAdapter 클래스의 생성자에서 전달되고 있습니다. –

+0

위의 코드에서 myContext는 생성자를 통해 초기화되는 것과 동일한 것입니까? 그리고 btw는 지원 라이브러리를 사용하고 있습니까? 귀하의 코드에서'getSupportFragmentManager'을 작성했으나 오류는'Can not Resolve getFragmentManager();'로 나타납니다. 나는 당신이 수입품을 편성 할 것을 조언한다. – upenpat

+0

아니, 그것이 작동할지 모르면 뭔가 테스트를 한 것이 아닙니다. 생성자의 컨텍스트는'Context ctx'입니다. 일반적으로 : FragmentManager에 대한 지원 라이브러리를 사용하지 마십시오. 그런 식으로 작동하는지 테스트합니다. –

관련 문제