2016-06-11 52 views
1

我有一個片段做搜索查看它的工作原理以及相關出頭,的Android變換當前片段級到活動類

但我想創建於通常執行任務的片段的活動。

XML中沒有問題,主要問題是Java代碼。片段中的某些方法,我不知道它們在活動中的相反方向。

片段代碼:

public class AirlineSearchFragment extends Fragment implements SearchView.OnQueryTextListener{ 
    private RecyclerView recyclerview; 
    private List<AirlineData> airlinesDataModel; 
    private AirlinesSearchViewAdapter adapter; 

    public AirlineSearchFragment() 
    { 
     setHasOptionsMenu(true); 

    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setHasOptionsMenu(true); 
     super.onCreate(savedInstanceState); 
    } 

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

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

     recyclerview = (RecyclerView) view.findViewById(R.id.recyclerview); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     recyclerview.setLayoutManager(layoutManager); 
     return view; 
    } 


    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     setHasOptionsMenu(true); 
     String[] locales = Locale.getISOCountries(); 
     airlinesDataModel = new ArrayList<>(); 
     airlinesDataModel.addAll(AirlinesCore.airlinesList); 
     adapter = new AirlinesSearchViewAdapter(airlinesDataModel); 
     recyclerview.setAdapter(adapter); 
    } 


    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.auto_complete, menu); 

     final MenuItem item = menu.findItem(R.id.action_search); 
     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
     searchView.setOnQueryTextListener(this); 

     MenuItemCompat.setOnActionExpandListener(item, 
       new MenuItemCompat.OnActionExpandListener() { 
        @Override 
        public boolean onMenuItemActionCollapse(MenuItem item) { 
         // Do something when collapsed 
         adapter.setFilter(airlinesDataModel); 
         return true; // Return true to collapse action view 
        } 

        @Override 
        public boolean onMenuItemActionExpand(MenuItem item) { 
         // Do something when expanded 
         return true; // Return true to expand action view 
        } 
       }); 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     final List<AirlineData> filteredModelList = filter(airlinesDataModel, newText); 
     adapter.setFilter(filteredModelList); 
     return true; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 

    private List<AirlineData> filter(List<AirlineData> models, String query) { 
     query = query.toLowerCase(); 

     final List<AirlineData> filteredModelList = new ArrayList<>(); 
     for (AirlineData model : models) { 
      if(model.arabicName==null) 
      { 
       model.arabicName=""; 
      } 
      if(model.shortName==null) 
      { 
       model.shortName=""; 
      } 
      if(model.name==null) 
      { 
       model.name=""; 
      } 
      final String text = model.name.toLowerCase()+model.shortName.toLowerCase() 
        +model.arabicName.toLowerCase()+model.code.toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 


} 

我從片段複製了一些方法活動(我要補充的嗎?):

public class AirlinesSearchActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{ 

    private RecyclerView recyclerview; 
    private List<AirlineData> airlinesDataModel; 
    private AirlinesSearchViewAdapter adapter; 

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

    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     final List<AirlineData> filteredModelList = filter(airlinesDataModel, newText); 
     adapter.setFilter(filteredModelList); 
     return true; 
    } 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 
    private List<AirlineData> filter(List<AirlineData> models, String query) { 
     query = query.toLowerCase(); 

     final List<AirlineData> filteredModelList = new ArrayList<>(); 
     for (AirlineData model : models) { 
      if(model.arabicName==null) 
      { 
       model.arabicName=""; 
      } 
      if(model.shortName==null) 
      { 
       model.shortName=""; 
      } 
      if(model.name==null) 
      { 
       model.name=""; 
      } 
      final String text = model.name.toLowerCase()+model.shortName.toLowerCase() 
        +model.arabicName.toLowerCase()+model.code.toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 
} 
+1

了嘗試移動你'onCreateView'邏輯和'onViewCreated'爲'Activity.onCreate()'的邏輯。並在活動中重寫'onCreateOptionsMenu'並複製片段中的邏輯 –

+0

基本上活動和片段生命週期非常相似。所以你可以移動onCreateView和onCreate - > onCreate,onResume - > onResume,onPause - > onPause等。 +1給胡安他的回答。 –

+0

另一種選擇是簡單地創建一個包含該片段的活動。 – 323go

回答

3

請嘗試移動onCreateViewonViewCreatedActivity.onCreate()中的邏輯。

然後覆蓋在活動onCreateOptionsMenu並複製在該片段中