Предположим, что у меня есть приложение, которое хранит информацию об объектах моего города.
У меня есть MainActivity
, которая содержит в себе HomeFragment
, который, в свою очередь, содержит RecyclerView
. Это список категорий объектов (Магазины, торговые центры и т.д.).
При нажатии на каждый элемент RecyclerView
я попадаю на новую Activity
, в которой содержится список CardView
(это уже элементы конкретной категории).
И, соответственно, при нажатии на каждый элемент CardView
я попадаю на новую Activity
, в которой содержится описание конкретного объекта.
Я уже начал делать так, что при нажатии на каждый элемент RecyclerView
, например, я создаю новую Activity
и перехожу на нее. И так далее.
В итоге получается очень много Activity
. Но ведь можно сделать например лишь HomeFragment
со списком категорий, одну Activity
, которая содержит элементы конкретной категории и одну Activity
, которая содержит описание конкретного объекта и лишь отображать в них нужные данные. Вопрос в том, как это сделать.
Код HomeFragment
:
public class HomeFragment extends Fragment {
private final String placeNames[] = {
"Категория 1",
"Категория 2",
"Категория 3",
"Категория 4",
"Категория 5",
};
private final String imageUrls[] = {
"https://cat1.jpg",
"httsp://cat2.jpg",
"https://cat3.jpg",
"https://cat4.jpg",
"https://cat5.jpg",
};
public HomeFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
// при нажатии на каждый элемент создаю новую Активити
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
switch (position) {
case 0:
getActivity().startActivity(new Intent(getActivity(),
ShopsActivity.class));
break;
case 1:
getActivity().startActivity(new Intent(getActivity(),
ShopCentersActivity.class));
break;
case 2:
getActivity().startActivity(new Intent(getActivity(),
FunActivity.class));
break;
case 3:
getActivity().startActivity(new Intent(getActivity(),
NightLifeActivity.class));
break;
case 4:
getActivity().startActivity(new Intent(getActivity(),
BeautyAndHealthActivity.class));
break;
case 5:
getActivity().startActivity(new Intent(getActivity(),
SportActivity.class));
break;
default: break;
}
}
})
);
ArrayList placeItems = prepareData();
DataAdapter adapter = new DataAdapter(placeItems, getActivity());
recyclerView.setAdapter(adapter);
return view;
}
private ArrayList prepareData() {
ArrayList placeItemList = new ArrayList<>();
for (int i = 0; i < placeNames.length; i++) {
PlaceItem itemPlace = new PlaceItem();
itemPlace.setPlaceName(placeNames[i]);
itemPlace.setImageUrl(imageUrls[i]);
placeItemList.add(itemPlace);
}
return placeItemList;
}
}
Код конкретной категории ShopsActivity
:
public class ShopsActivity extends AppCompatActivity {
private ShopsAdapter adapter;
private List<ConcreteObject> objectList;
@SuppressLint("PrivateResource")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shops);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (toolbar != null) {
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.shops_recycler_view);
objectList = new ArrayList<>();
adapter = new ShopsAdapter(this, objectList);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
if (recyclerView != null) {
recyclerView.setLayoutManager(layoutManager);
recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
// тут я снова создаю новые Активити и перехожу на них
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(),
recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
switch (position) {
case 0:
startActivity(new Intent(ShopsActivity.this, OneShop.class));
break;
case 1:
startActivity(new Intent(ShopsActivity.this, TwoShop.class));
break;
case 2:
startActivity(new Intent(ShopsActivity.this, ThreeShop.class));
break;
case 3:
startActivity(new Intent(ShopsActivity.this, FourShop.class));
break;
case 4:
startActivity(new Intent(ShopsActivity.this, FiveShop.class));
break;
case 5:
startActivity(new Intent(ShopsActivity.this, SixShop.class));
break;
case 6:
startActivity(new Intent(ShopsActivity.this, SevenShop.class));
break;
case 7:
startActivity(new Intent(ShopsActivity.this, Eight.class));
break;
default:
break;
}
}
@Override
public void onLongClick(View view, int position) {
}
}));
}
prepareObjects();
Glide.with(this)
.load(R.drawable.cover_backdrop)
.into((ImageView) findViewById(R.id.backdrop));
}
@Override
protected void prepareObjects() {
objectList.add(new ConcreteObject("Oneshop", 3.9, R.drawable.one));
objectList.add(new ConcreteObject("TwoShop", 3.5, R.drawable.two));
objectList.add(new ConcreteObject("ThreeShop", 3.5, R.drawable.three));
objectList.add(new ConcreteObject("FourShop", 3.5, R.drawable.four));
...
adapter.notifyDataSetChanged();
}
}
Код конкретного объекта ConcreteOneActivity
:
public class ConcreteOneActivity extends StartConfig {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_concrete_one);
setToolbar(R.id.toolbar_concrete_one_toolbar);
setCollapsingToolbar("ConcreteOne", R.id.concrete_one_collapsing_toolbar);
CustomPagerAdapter adapter = new CustomPagerAdapter(this) {
@Override
public Object instantiateItem(ViewGroup collection, int position) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = null;
switch (position) {
case 0:
view = inflater.inflate(R.layout.concrete_one_information, collection, false);
break;
case 1:
view = inflater.inflate(R.layout.concrete_one_location, collection, false);
break;
case 2:
view = inflater.inflate(R.layout.map_fragment, collection, false);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
break;
}
collection.addView(view);
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng concreteOne = new LatLng(1, 1);
mMap.addMarker(new MarkerOptions().position(concreteOne).title("ConcreteOne");
mMap.moveCamera(CameraUpdateFactory.newLatLng(concreteOne));
}
};
setViewPager(adapter);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Если я правильно понимаю, основной принцип отлова ошибок try catch является в том, чтобы при появлении какой-то определенной - ожидаемой ошибки,...
Работал в Composer (среда на основе Eclipse), программа сама завершила работу и больше не запускается, отображается ошибка, что на скрине
Делаю клиент VK в виде бота для TelegramСделал обмен сообщениями в разные стороны, чаты