大家好,
也许这是一个简单和/或愚蠢的问题但是因为它让我发疯了我发帖。
我在名为CoursFindAdapter的类中有 Listview 和自定义ArrayAdapter ,getView是这样的:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
this.parent = parent;
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.cours_find,parent, false);
}
final Cours cours = getItem(position);
telephone = cours.getTelephone();
email = cours.getEmail();
latitude = (long)cours.getLatitude();
longitude = (long)cours.getLongitude();
code = cours.getCode();
id_cours = cours.getId();
tarif = String.valueOf(cours.getTarif());
specialite = cours.getSpecialite();
prenom = cours.getPrenom();
nom = cours.getNom();
titre = cours.getTitre();
description = cours.getDescription();
reserve = cours.getReserve();
SharedPreferences prefs = getContext().getSharedPreferences(
"com.learnys.android", Context.MODE_PRIVATE);
String container = "com.learnys.android.id";
id_etudiant = prefs.getString(container, "0");
CoursViewHolder viewHolder = (CoursViewHolder) convertView.getTag();
if(viewHolder == null){
viewHolder = new CoursViewHolder();
viewHolder.titre = (TextView) convertView.findViewById(R.id.titre);
viewHolder.description = (TextView) convertView.findViewById(R.id.description);
viewHolder.codepostal = (TextView) convertView.findViewById(R.id.codepostal);
viewHolder.ville = (TextView) convertView.findViewById(R.id.ville);
viewHolder.tarif = (TextView) convertView.findViewById(R.id.tarif);
viewHolder.nom = (TextView) convertView.findViewById(R.id.nom);
viewHolder.prenom = (TextView) convertView.findViewById(R.id.prenom);
viewHolder.specialite = (TextView) convertView.findViewById(R.id.specialite);
viewHolder.distance = (TextView) convertView.findViewById(R.id.distance);
viewHolder.choice = (Button) convertView.findViewById(R.id.choice);
convertView.setTag(viewHolder);
}else {
viewHolder = (CoursViewHolder) convertView.getTag();
}
viewHolder.titre.setText(Html.fromHtml("<html><body><font size=10 color=red>Cours: </font> " + cours.getTitre() + " </body><html>"));
viewHolder.description.setText(Html.fromHtml("<html><body><font size=10 color=red>Description: </font> "+cours.getDescription()+" </body><html>"));
viewHolder.codepostal.setText(Html.fromHtml("<html><body><font size=10 color=red>Code Postal: </font> "+String.valueOf(cours.getCodepostal())+" </body><html>"));
viewHolder.ville.setText(Html.fromHtml("<html><body><font size=10 color=red>Ville: </font> "+cours.getVille()+" </body><html>"));
viewHolder.tarif.setText(Html.fromHtml("<html><body><font size=10 color=red>Tarif: </font> "+String.valueOf(cours.getTarif())+" </body><html>"));
viewHolder.nom.setText(Html.fromHtml("<html><body><font size=10 color=red>Nom Professeur: </font> "+cours.getNom()+" </body><html>"));
viewHolder.prenom.setText(Html.fromHtml("<html><body><font size=10 color=red>Prénom Professeur: </font> " + cours.getPrenom() + " </body><html>"));
viewHolder.specialite.setText(Html.fromHtml("<html><body><font size=10 color=red>Spécialité Professeur: </font> "+cours.getSpecialite()+" </body><html>"));
viewHolder.distance.setText(Html.fromHtml("<html><body><font size=10 color=red>Distance: </font> " + cours.getDistance() + " <font size=10 color=red>Temps: </font> " + cours.getTime() + " </body><html>"));
if (cours.getEtudiant() == Integer.valueOf(id_etudiant)){
viewHolder.choice.setText("Cours réservé");
viewHolder.choice.setTextColor(Color.BLACK);
///viewHolder.code.setClickable(false);
viewHolder.choice.setEnabled(false);
}else {
viewHolder.choice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Activity origin = (Activity) getContext();
Intent myIntent = new Intent(origin, PayPalActivity.class);
myIntent.putExtra("id_cours", id_cours);
myIntent.putExtra("id_etudiant", id_etudiant);
myIntent.putExtra("tarif", tarif);
myIntent.putExtra("specialite", specialite);
myIntent.putExtra("description", description);
myIntent.putExtra("prenom", prenom);
myIntent.putExtra("nom", nom);
myIntent.putExtra("telephone", telephone);
myIntent.putExtra("email", email);
myIntent.putExtra("titre", titre);
myIntent.putExtra("code", code);
myIntent.putExtra("cours", cours);
getContext().startActivity(myIntent);
}
});
}
return convertView;
}
视图持有者类:
public class CoursViewHolder{
public TextView titre;
public TextView description;
public TextView codepostal;
public TextView ville;
public TextView tarif;
public TextView nom;
public TextView prenom;
public TextView specialite;
public String email;
public String telephone;
public long latitude;
public long longitude;
public String code;
public Button choice;
public TextView distance;
}
由另一个类填充:
CoursFindAdapter adapter = new CoursFindAdapter(getActivity(),
cours,getActivity(), page);
adapter.setContext(getActivity());
listView.setAdapter(adapter);
自定义适配器的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
>
<TextView
android:id="@+id/titre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Titre"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/description"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Description"
android:layout_below="@+id/titre"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/ville"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Ville"
android:layout_below="@+id/description"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/tarif"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Tarif"
android:layout_below="@+id/codepostal"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/nom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Nom"
android:layout_below="@+id/tarif"
android:layout_alignLeft="@+id/tarif"
android:layout_alignStart="@+id/tarif" />
<TextView
android:id="@+id/prenom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Prenom"
android:layout_below="@+id/nom"
android:layout_alignLeft="@+id/nom"
android:layout_alignStart="@+id/nom" />
<TextView
android:id="@+id/specialite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Specialité"
android:layout_below="@+id/prenom"
android:layout_alignLeft="@+id/prenom"
android:layout_alignStart="@+id/prenom" />
<TextView
android:id="@+id/distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
tools:text="Distance"
android:layout_below="@+id/specialite"
android:layout_alignLeft="@+id/specialite"
android:layout_alignStart="@+id/specialite" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Choisir"
android:id="@+id/choice"
style="@style/MaterialButton"
android:layout_below="@+id/distance"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="25dp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/choice"
android:background="@android:color/darker_gray"/>
<TextView
tools:text="Code Postal"
android:id="@+id/codepostal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:layout_below="@+id/ville"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
每次点击按钮按钮列表中的项目时,PayPalActivity类的数据发布始终是与之相关的数据列表中的下一个ID 。有时但不经常是它采取正确的数据(仅在列表的第一项)。
我很害羞我做错了什么;实现,XML或其他东西我无法理解,因为我在另一个活动上使用类似的代码,并且预计工作正常: - (
我尝试了很多东西,包括删除这部分代码而没有成功地删除整个数据:
if (Integer.valueOf(reserve) == 1 && cours.getEtudiant() != Integer.valueOf(id_etudiant)) {
convertView.setVisibility(View.INVISIBLE);
}
else if (cours.getEtudiant() == Integer.valueOf(id_etudiant)){
viewHolder.choice.setText("Cours réservé");
viewHolder.choice.setTextColor(Color.BLACK);
///viewHolder.code.setClickable(false);
viewHolder.choice.setEnabled(false);
}
我陷入了愚蠢的境地,我现在不知道该怎么做,非常感谢任何帮助。
[编辑]我注意到如果我在某个位置(不显示列表中下一个项目的任何像素),结果就可以,但我认为这不是正确的行为:正确的行为应该是:'即使项目没有完全显示,项目'的一个按钮选项也应该驱动整个项目的数据(重要的是与项目相关的按钮) 关心所有人并感谢您阅读此问题: - )
答案 0 :(得分:1)
您的问题很简单:您在onClickListener()
。
所以你需要做的就是
viewHolder.choice.setTag(position);
viewHolder.choice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cours c = getItem((int) view.getTag());
Activity origin = (Activity) getContext();
Intent myIntent = new Intent(origin, PayPalActivity.class);
myIntent.putExtra("id_cours", c.getId());
myIntent.putExtra("id_etudiant", id_etudiant);
myIntent.putExtra("tarif", String.valueOf(c.getTarif()));
myIntent.putExtra("specialite", c.getSpecialite());
myIntent.putExtra("description", c.getDescription());
.
.
.
myIntent.putExtra("cours", c);
getContext().startActivity(myIntent);
}
});
发生的事情是,每次调用getView()
时,您的数据都会更新,即直到所有视图都已布局为止。单击某个项目时,值将更改。因此,您将从getView()
迭代中获取最后一个值。
此外,您可能不想使用cours
中的所有字段,而是使用cours.getId()
等,而我确信这不会影响您的效果。