我需要用listview
的自定义元素填充我的arraylist
。在尝试从我的API获取它之前,我创建了一个虚拟的arraylist,具有不同的值以应用于适配器。我在此处输入的元素数量为六个。问题在于,第四位之后的元素重复标题(这是我的自定义对象的唯一变量),并从头开始重新启动它。
结果列表不是1-2-3-4-5-6而是1-2-3-4-1-2。
我的自定义适配器
public class librettoAdapter extends ArrayAdapter<librettoDTO> {
Context context;
public librettoAdapter(Context context, int risorsaId,
List<librettoDTO> items) {
super(context, risorsaId, items);
this.context = context;
}
//metodo getView --> ritorna la view da inserire nella ListView
public View getView(int position, View convertView, ViewGroup parent) {
//controllo se c'è gia un layout
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.libretto_element, null);
librettoDTO content = getItem(position);
TextView textTitolo = convertView.findViewById(R.id.nome_materia);
textTitolo.setText(content.getTitolo());
}
return convertView;
}
}
填充列表视图
inputItems = new ArrayList<librettoDTO>();
/** RITORNA LA CHIAAMATA*/
/** SOTITUIRE CON LIBRETTODTO */
/* FACCIAMO FINTA CHE SIA IL RISULTATO DELA CHIAMATA */
librettoDTO source1 = new librettoDTO("titolo1");
librettoDTO source2 = new librettoDTO("titolo2");
librettoDTO source3 = new librettoDTO("titolo3");
librettoDTO source4 = new librettoDTO("titolo4");
librettoDTO source5 = new librettoDTO("tsdasdadssa");
librettoDTO source6 = new librettoDTO("6666666");
inputItems.add(source1);
inputItems.add(source2);
inputItems.add(source3);
inputItems.add(source4);
inputItems.add(source5);
inputItems.add(source6);
contentItems = new ArrayList<librettoDTO>();
for (int i = 0; i < inputItems.size(); i++) {
//librettoDTO item = new librettoDTO(titoli[i]); //INIT DTO GET FROM ARRAY LIST
librettoDTO item = inputItems.get(i);
contentItems.add(item);
//setto la listview e istanzio l'adapter che si prende lo stile xml e l'arraylist di content
librettoAdapter adapter = new librettoAdapter(getContext(),
R.layout.libretto_element, contentItems);
listView = (ListView) v.findViewById(R.id.libretto_listview);
listView.setAdapter(adapter);
//setto il listener
//listView.setOnItemClickListener(this);
}
答案 0 :(得分:0)
使用RecyclerView
像这样更改适配器
适配器 librettoAdapter.class
public class librettoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List inputItems;
public librettoAdapter(List<String> inputItems) {
this.inputItems = inputItems;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
context = parent.getContext();
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_text, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
String text = inputItems.get(position);
textview.settext(text);
}
@Override
public int getItemCount() {
return this.inputItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.textview)
TextView textview;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
将项目设置为
list
inputItems = new ArrayList<librettoDTO>();
/** RITORNA LA CHIAAMATA*/
/** SOTITUIRE CON LIBRETTODTO */
/* FACCIAMO FINTA CHE SIA IL RISULTATO DELA CHIAMATA */
librettoDTO source1 = new librettoDTO("titolo1");
librettoDTO source2 = new librettoDTO("titolo2");
librettoDTO source3 = new librettoDTO("titolo3");
librettoDTO source4 = new librettoDTO("titolo4");
librettoDTO source5 = new librettoDTO("tsdasdadssa");
librettoDTO source6 = new librettoDTO("6666666");
inputItems.add(source1);
inputItems.add(source2);
inputItems.add(source3);
inputItems.add(source4);
inputItems.add(source5);
inputItems.add(source6);
librettoAdapter = new librettoAdapter(keyList,valuesList);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(librettoAdapter);
或
如果仍然要使用listview,请尝试删除if (convertView == null)
条件。
答案 1 :(得分:0)
已解决:刚刚评论了convertView的检查
include "conn.php";
$maketemp = "
CREATE TEMPORARY TABLE temp_table_1 (
`idarea` int NOT NULL,
`kode` varchar(20),
PRIMARY KEY(idarea)
)
";
mysql_query($maketemp, $connect) or die ("Sql error : ".mysql_error());
$inserttemp = "
INSERT INTO temp_table_1 (`idarea`, `kode`)
SELECT `id_areasf`, `kd_areasf` FROM `areasf`
";
mysql_query($inserttemp, $connect) or die ("Sql error : ".mysql_error());
$select = "SELECT * FROM temp_table_1";
$export = mysql_query($select, $connect) or die ("Sql error : ".mysql_error());
答案 2 :(得分:0)
Android Listview使用缓存进行视图绑定。例如,如果您的屏幕仅覆盖4个项目,则要进行绑定5。item listview使用cache中的一项。在四个getview调用中,视图将为null,您将对其进行夸大。但是对于5. item,由于缓存的使用,它可能不会为null。在您的示例中,listview使用了缓存中的第一项来绑定5. item,而if(convertView == null)的内部将不会运行。 5.项目。
更改为:
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.libretto_element, null);
}
librettoDTO content = getItem(position);
TextView textTitolo = convertView.findViewById(R.id.nome_materia);
textTitolo.setText(content.getTitolo());
return convertView;