listview - 用单例实例填充 ListView
问题描述
我知道这个问题对你们大多数人来说可能很愚蠢,但我仍然需要帮助。
我正在尝试使用带有 Singleton 实例的碎片来填充和 ArrayList(或者至少是我理解我正在尝试做的事情)
我有一个申请表,用户必须填写信息:
@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:
类公式单例{
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 标题相同。
任何想法?
非常感谢
解决方案
最后,我设法给自己解决了这个问题。也许有人有同样的问题。
因此,首先在我的应用程序表单片段中,我创建了一个按钮来发布信息并在我的 Singleton 中设置所有内容。这个按钮不起作用,因为我用充气机返回视图。我只需要返回视图,所以我替换了这个:
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(); 在 onClick 按钮中。以前我在 onResum() 方法中执行此操作,其中在完成表单之前设置了所有信息。
最后我意识到我在我的 listview.java 中调用了一个默认适配器(ArrayAdapter)而不是我自己的适配器,所以我替换了这个:
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;
}
希望有人能从中获利!!
推荐阅读
- c# - 如何在不暂停代码的情况下在 PrintPreview 中打开 Excel 文件
- javascript - 如何仅在选择某个下拉菜单项时激活输入字段
- bootstrap-4 - Boostrap 4 中的 Flex 布局
- java - 如何在不丢失数据的情况下替换并发实例?
- c - 如何在同一台机器上以编程方式获取通过 AF_INET 套接字连接到我的代理的进程的 PID?
- codeigniter - 通过辅助函数在 codeigniter 中初始化第二个数据库
- javascript - create-react-app 中的 Google Calendar API gapi.client.init 抛出错误
- maven - Artifactory:上传的工件不再有 md5 和 sha1 文件
- python - 如何在python中保存相对于其id的坐标值
- android - Android 应用程序或其内容在 Google Pixel 2 上被截断