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;
}
}
了嘗試移動你'onCreateView'邏輯和'onViewCreated'爲'Activity.onCreate()'的邏輯。並在活動中重寫'onCreateOptionsMenu'並複製片段中的邏輯 –
基本上活動和片段生命週期非常相似。所以你可以移動onCreateView和onCreate - > onCreate,onResume - > onResume,onPause - > onPause等。 +1給胡安他的回答。 –
另一種選擇是簡單地創建一個包含該片段的活動。 – 323go