Заполнить ListView с экземпляром Singleton - PullRequest
0 голосов
/ 28 марта 2019

Я знаю, что эта проблема может быть глупой для большинства из вас, но мне все еще нужна помощь в этом.

Я пытаюсь заполнить и ArrayList, используя фрагменты с экземпляром Singleton (или, по крайней мере, это то, что я понимаю, я пытаюсь сделать)

У меня есть форма заявки, где пользователь должен заполнитьс информацией:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_formulari, container, false);

    titolET = view.findViewById(R.id.titolAnunciET);
    cuantaGenteET = view.findViewById(R.id.quantitatGentET);
    horaET = view.findViewById(R.id.horaET);
    queBirraRB = view.findViewById(R.id.birraRB);
    queCafeRB = view.findViewById(R.id.cafeRB);
    comidaSW = view.findViewById(R.id.ComerSW);

    postBT = view.findViewById(R.id.introBT);

    postBT.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            postInformation();

        }
    });
    return inflater.inflate(R.layout.fragment_formulari, container, false);


}


@Override
public void onResume() {
    super.onResume();
    setInformation();
}

public void setInformation() {

    tituloString = titolET.getText().toString();
    cuantaGenteSrting = cuantaGenteET.getText().toString();
    cafe = queCafeRB.isChecked();
    birra = queBirraRB.isChecked();
    comida = comidaSW.isChecked();
    horaString = horaET.getText().toString();

    if (cafe) {
        cafeSiNo = "Beben cafe o refrescos";
    } else {
        cafeSiNo = "No beben cafe o refrescos";
    }
    if (birra) {
        birraSiNo = "Beben birra";
    } else {
        birraSiNo = "No beben birra";
    }
    if (comida) {
        comidaSiNo = "Estan comiendo";
    } else {
        comidaSiNo = "No estan comiendo";
    }

    System.out.print(tituloString);


    respostesFormulari = new RespostesFormulari(tituloString);
    respostesFormulari.setTitol(tituloString);
    respostesFormulari.setQuantaGent(cuantaGenteSrting);
    respostesFormulari.setHora(horaString);
    respostesFormulari.setQueBirra(birraSiNo);
    respostesFormulari.setQueCafe(cafeSiNo);
    respostesFormulari.setMenjarBool(comidaSiNo);

    formulariSingleton = FormulariSingleton.getInstance();
    formulariSingleton.add(respostesFormulari);


}

У меня также есть этот класс RespostesFormulari.java:

public class RespostesFormulari {

 private String titol;
 private String quantaGent;
 private String queBirra;
 private String queCafe;
 private String menjarBool;
 private String hora;

 public RespostesFormulari(String titol){this.titol = titol;}

public RespostesFormulari(String titol, String finalquantaGent, String finalqueBirra, String finalqueCafe, String finalmenjarBool, String finalHora) {
    this.titol = titol;
    this.quantaGent = finalquantaGent;
    this.queBirra = finalqueBirra;
    this.queCafe = finalqueCafe;
    this.menjarBool = finalmenjarBool;
    this.hora = finalHora;



}

public String getTitol(){
    return this.titol;
}

public void setTitol(String titol){
    this.titol = titol;

}
public String getQuantaGent() {
    return this.quantaGent;
}

public void setQuantaGent(String quantaGent) {
    this.quantaGent = quantaGent;
}

public String getQueBirra() {
    return this.queBirra;
}

public void setQueBirra(String queBirra) {
    this.queBirra = queBirra;
}

public String getQueCafe() {
    return this.queCafe;
}

public void setQueCafe(String queCafe) {
    this.queCafe = queCafe;
}

public String getMenjarBool() {
    return this.menjarBool;
}

public void setMenjarBool(String menjarBool) {
    this.menjarBool = menjarBool;
}

public String getHora() {
    return this.hora;
}

public void setHora(String hora) {
    this.hora = hora;
}

}

И это мой синглтон, где я управляю своим RespostesFormulari.java:

класс FormulariSingleton {

private RespostesFormulari respostesFormulari;
private static final FormulariSingleton formulariSingletonInstance = new FormulariSingleton();
public ArrayList<RespostesFormulari> respostesFormularisLlista;

public String titolAnunci;


public static FormulariSingleton getInstance() {
    return formulariSingletonInstance;
}


private FormulariSingleton(){
    respostesFormularisLlista = new ArrayList<RespostesFormulari>();
    respostesFormulari = new RespostesFormulari("","","","","","");
    //respostesFormularisLlista.add(new RespostesFormulari("","",false,false,false,""));
}



public ArrayList<RespostesFormulari> getLlista(){
    return this.respostesFormularisLlista; }

public void setRespostesFormulari(RespostesFormulari rf){
    this.respostesFormulari = rf; }

public void add(RespostesFormulari newRespostes){
    this.respostesFormularisLlista.add(newRespostes);}

public void delete(RespostesFormulari newRespostes){
    this.respostesFormularisLlista.remove(newRespostes);}




public void getTitolAnunci(RespostesFormulari titol) {
    titolAnunci = titol.getTitol();}





public void setClickedAnunci(RespostesFormulari anunci){
    respostesFormulari = anunci;
}
public RespostesFormulari getClickedAnunci(){
    return respostesFormulari;
}

наконец, это мой класс ListView:

public class LlistaFragment extends Fragment {

public ListView listview;

ArrayAdapter<RespostesFormulari> adapter;
// ArrayList<> llista

private OnFragmentInteractionListener fListener;


public LlistaFragment() {


}

public static LlistaFragment newInstance(String param1, String param2) {
    LlistaFragment fragment = new LlistaFragment();
    Bundle args = new Bundle();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(getArguments() != null) {
    }
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
   // return super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment_llistat, container, false);

    listview = rootView.findViewById(R.id.llistView);

   // ArrayList<RespostesFormulari> llista = FormulariSingleton.getInstance().getLlista();

    adapter = new ArrayAdapter<RespostesFormulari>(getActivity(), android.R.layout.simple_list_item_1, FormulariSingleton.getInstance().getLlista());

    listview.setAdapter(adapter);
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            FormulariSingleton formulariSingleton = FormulariSingleton.getInstance();
            RespostesFormulari item = (RespostesFormulari) parent.getItemAtPosition(position);
            formulariSingleton.getTitolAnunci(item);
            formulariSingleton.setClickedAnunci(item);




            Intent intent = new Intent(getActivity(), DetallAnunci.class);
            intent.putExtra("Titol", position);

            /*intent.putExtra("Titol", item.getTitol());
            intent.putExtra("Numero gente", item.getQuantaGent());
            intent.putExtra("Beben birra?",item.getQueBirra());
            intent.putExtra("Beben cafe o refresco?", item.getQueCafe());
            intent.putExtra("Estan comiendo?", item.getMenjarBool());
            intent.putExtra("A que hora se van?", item.getHora());*/


            startActivity(intent);
        }
    });
    return rootView;


}

Когда я захожу внутрь каждого элемента, информация не отображается и совпадает сlistView title.

Есть идеи?

Большое спасибо

1 Ответ

0 голосов
/ 28 марта 2019

Наконец-то мне удалось найти решение проблемы. Может быть, у кого-то есть такая же проблема.

Итак, прежде всего, в своем фрагменте формы заявки я создал кнопку для публикации информации и установил все в моем синглтоне. Эта кнопка не работала, потому что я возвращал вид с инфлятором. Мне просто нужно было вернуть представление, поэтому я заменил это:

 postBT.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {
        postInformation();

    }
});
return inflater.inflate(R.layout.fragment_formulari, container, false);

с этим: `postBT.setOnClickListener (new View.OnClickListener () {

    @Override
    public void onClick(View view) {
        setInformation();
        postInformation();

    }
});
return view;

` я также добавил setInformation (); в кнопке на клик. Ранее я делал это в методе onResum (), где перед заполнением формы была задана вся информация.

Наконец, я понял, что я вызываю адаптер по умолчанию (ArrayAdapter) в моем listview.java вместо моего собственного адаптера, поэтому я заменил это:

 adapter = new ArrayAdapter<RespostesFormulari>(getActivity(), android.R.layout.simple_list_item_1, FormulariSingleton.getInstance().getLlista());

listview.setAdapter(adapter);

с этим:

adapter = new Adapter(getActivity(), FormulariSingleton.getInstance().getLlista());

listview.setAdapter(adapter);

это код моего адаптера:

public class Adapter extends BaseAdapter {

private ArrayList<RespostesFormulari> respostesFormularis;
private Context mcontext;

//CONSTRUCTOR

public Adapter(Context mcontext, ArrayList<RespostesFormulari> respostesFormularis){
    this.mcontext=mcontext;
    this.respostesFormularis=respostesFormularis;
}

@Override
public int getCount(){return respostesFormularis.size();}

@Override
public Object getItem(int position){return respostesFormularis.get(position);}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
    convertView=View.inflate(mcontext, R.layout.cella_llista,null);
    TextView titol = convertView.findViewById(R.id.titolTV);
    titol.setText(FormulariSingleton.getInstance().getLlista().get(position).getTitol());
    return convertView;
}

Надеюсь, кто-то может воспользоваться этим !!

...