所以我有一个名为DINDUMENTARIA的主Activity,它有一个ViewPager和一个自定义适配器来创建一个带有两个片段的可滑动tablayout。现在,每个片段都应显示一个复选框列表,这些复选框是从CustomAdapter中生成的,并且彼此不同。
目前的状态是: Fragment 1& Fragment 2
我想要实现的是让两个片段拥有它自己独立的复选框列表。
主要问题是两个片段似乎都在同一个Activity上工作并填充相同的布局。我不知道,我很困惑。
以下是代码:
' MainActivity'
public class DINDUMENTARIA extends CarrerasActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.planes);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
DINDUMENTARIA_Adapter adapter = new DINDUMENTARIA_Adapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(viewPager);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
myToolbar.showOverflowMenu();
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
getSupportActionBar().setTitle("Diseño de Indumentaria");
}
}
FragmentPagerAdapter
public class DINDUMENTARIA_Adapter extends FragmentPagerAdapter{
private String tabTitles[] = new String[] {"Plan nuevo", "Plan viejo"};
public DINDUMENTARIA_Adapter(FragmentManager fm) {
super(fm);
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
if (position == 0) {
return new DINDUMENTARIA_PN();
} else {
return new DINDUMENTARIA_PV();
}
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
}
First Fragment代码。 Second Fragment应该相同但名称不同,HashMaps和Strings将填充不同的值。
public class DINDUMENTARIA_PN extends Fragment {
public DINDUMENTARIA_PN() {
// Required empty public constructor
}
@Override
public void onStart() {
super.onStart();
// LinkedHashMap de las materias de la carrera
final LinkedHashMap<String, Materia> materias = new LinkedHashMap<>();
final String[] nombresMaterias = {...};
for (String nombreMateria : nombresMaterias) {
materias.put(nombreMateria, new Materia(nombreMateria));
}
// Correlativas NIVEL 1
materias.get("...").addCorrelativa(materias.get("..."));
final ArrayList<Materia> listaMaterias = new ArrayList<>(materias.values());
((CarrerasActivity)getActivity()).reloadAll(listaMaterias);
// El Adapter busca la materia en el HashMap y rellena el materias_list con la info del
// HashMap y el formato de materias_list_item
final MateriaAdapter adapter = new MateriaAdapter(getActivity().getApplicationContext(), listaMaterias);
ListView listView = (ListView) getActivity().findViewById(list);
listView.setAdapter(adapter);
// Asignar un click listener a cada materia creada
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View item, int position, long id) {
CheckBox cb = (CheckBox) item;
String nombre = (String) cb.getText();
Materia materia = materias.get(nombre);
if (materia.isEnabled()) {
materia.setAprobada(!materia.aprobada());
((CarrerasActivity)getActivity()).storeMateria(materia.nombre(), materia.aprobada());
} else {
Toast.makeText(getContext(),
"Para cursar " + materia.nombre() + " tenes que aprobar:\n" + materia.getStringCorrelativas(),
Toast.LENGTH_LONG).show();
}
((CarrerasActivity)getActivity()).reloadAll(listaMaterias);
adapter.notifyDataSetChanged();
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.materias_list_notoolbar, container, false);
}
@Override
public void onPause() {
super.onPause();
}
}
CarrerasActivity,它只是一个辅助工具,用于在整个应用程序中存储一些重用的功能。
public class CarrerasActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.directory, menu);
return super.onCreateOptionsMenu(menu);
}
public void storeMateria(String idMateria, Boolean aprobada) {
SharedPreferences pref = getMySharedPreferences();
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(idMateria, aprobada);
editor.apply();
}
public void reloadAll(ArrayList<Materia> materias) {
SharedPreferences pref = getMySharedPreferences();
for (Materia materia : materias) {
String materiaId = materia.nombre();
Boolean aprobada = pref.getBoolean(materiaId, false);
materia.setAprobada(aprobada);
}
int aprobadas = 0;
for (Materia materia : materias) {
materia.refresh();
boolean aprobada = materia.aprobada();
storeMateria(materia.nombre(), aprobada);
aprobadas += aprobada ? 1 : 0;
}
setAprobadas(aprobadas);
setRestantes(materias.size() - aprobadas);
setPorcentaje(Float.valueOf(aprobadas) / Float.valueOf(materias.size()));
}
private SharedPreferences getMySharedPreferences() {
return getSharedPreferences(getLocalClassName(), MODE_PRIVATE);
}
private void setAprobadas(int number) {
TextView aprobadasTextView = (TextView) findViewById(R.id.aprobadas_text_view);
aprobadasTextView.setText("Aprobadas: " + number);
}
private void setRestantes(int number) {
TextView restantesTextView = (TextView) findViewById(R.id.restantes_text_view);
restantesTextView.setText("Restantes: " + number);
}
private void setPorcentaje(float number) {
int porcentajeInt = (int) Math.round(number * 100);
TextView porcentajeTextView = (TextView) findViewById(R.id.porcentaje_text_view);
porcentajeTextView.setText(porcentajeInt + " %");
ProgressBar laBarrita = (ProgressBar) findViewById(R.id.progressBarView);
laBarrita.setProgress(porcentajeInt);
}
}
非常感谢