自定义ArrayAdapter不从Fragment中填充ListView

时间:2017-06-08 15:54:31

标签: android

所以我有一个名为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);
    }
}

非常感谢

0 个答案:

没有答案