#java #android #android-listview #android-spinner #android-dialog
#java #Android #android-listview #android-счетчик #android-dialog
Вопрос:
Я начинаю с Android. В activity я создаю listview с пользовательским представлением, при нажатии я открываю диалоговое окно с несколькими вертушками и текстовыми представлениями. Однако мой счетчик не работает. Появляется список счетчиков, но когда я нажимаю, ничего не происходит, и значение по умолчанию не отображается.
Заранее спасибо за вашу помощь!
Вот ссылка на диск, чтобы посмотреть, что происходит: https://drive.google.com/file/d/1t2omOA7gJQJNtTVV6Wig5EShYo5cwj0v/view?usp=sharing
Вот мой код: TeamActivity.java
public class TeamActivity extends AppCompatActivity{
ArrayList<Team> teams;
static String[] selected;
static int id_selected;
Spinner s_p1;
ArrayAdapter ad_sp1;
Spinner s_p2;
Spinner s_p3;
//Constructeur
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_team);
/*Team creation*/
teams = new ArrayList<Team>();
int id = 1;
for (int i = 0; i < participants.size(); i = i 3) {
teams.add(new Team(id, participants.get(i), participants.get(i 1), participants.get(i 2)));
id ;
}
/*list view*/
final ListView listView = (ListView) findViewById(R.id.listView_team);
// Create the adapter to convert the array to views
final TeamAdapter adapter = new TeamAdapter(this, teams);
// Attach the adapter to a ListView
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, final View view, int i, long l) {
id_selected = i;
AlertDialog.Builder d_builder = new AlertDialog.Builder(listView.getContext());
View d_order = getLayoutInflater().inflate(R.layout.dialog_order,null);
s_p1 = (Spinner) d_order.findViewById(R.id.spinner_p1);
selected = new String[3];
ad_sp1 = new ArrayAdapter<String>(listView.getContext(),android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.value));
ad_sp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s_p1.setAdapter(ad_sp1);
d_builder.setPositiveButton("Validez", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
d_builder.setView(d_order);
AlertDialog dialog = d_builder.create();
dialog.show();
}
});
}
}
layout/dialog_order.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<Spinner
android:id="@ id/spinner_p3"
android:layout_width="84dp"
android:layout_height="41dp"
android:layout_marginStart="6dp"
android:layout_marginTop="116dp"
android:layout_toEndOf="@ id/textView_fname_p3"
android:backgroundTint="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/textView_name_p1"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="20dp"
android:layout_marginTop="16dp"
android:text="TextView"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="25dp" />
<TextView
android:id="@ id/textView_fname_p1"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="268dp"
android:layout_marginTop="16dp"
android:text="TextView"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="276dp" />
<TextView
android:id="@ id/textView_name_p2"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="21dp"
android:layout_marginTop="63dp"
android:text="TextView"
android:textSize="30sp"
tools:layout_editor_absoluteX="25dp"
tools:layout_editor_absoluteY="66dp" />
<TextView
android:id="@ id/textView_fname_p2"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="268dp"
android:layout_marginTop="65dp"
android:text="TextView"
android:textSize="30sp"
tools:layout_editor_absoluteX="276dp"
tools:layout_editor_absoluteY="66dp" />
<TextView
android:id="@ id/textView_name_p3"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="20dp"
android:layout_marginTop="112dp"
android:text="TextView"
android:textSize="30sp"
tools:layout_editor_absoluteX="25dp"
tools:layout_editor_absoluteY="116dp" />
<TextView
android:id="@ id/textView_fname_p3"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="268dp"
android:layout_marginTop="113dp"
android:text="TextView"
android:textSize="30sp"
tools:layout_editor_absoluteX="276dp"
tools:layout_editor_absoluteY="116dp" />
<Spinner
android:id="@ id/spinner_p1"
android:spinnerMode="dialog"
android:entries="@array/value"
android:layout_width="84dp"
android:layout_height="41dp"
android:layout_marginStart="7dp"
android:layout_marginTop="16dp"
android:layout_toEndOf="@ id/textView_fname_p1"
android:backgroundTint="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Spinner
android:id="@ id/spinner_p2"
android:layout_width="84dp"
android:layout_height="41dp"
android:layout_marginStart="7dp"
android:layout_marginTop="64dp"
android:layout_toEndOf="@ id/textView_fname_p2"
android:backgroundTint="#000000"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</RelativeLayout>
```
**values/order_value.xml**
```<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="value">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
</resources>
TeamAdapter.java
public class TeamAdapter extends ArrayAdapter<Team> {
// View lookup cache
private static class ViewHolder {
TextView name_p1;
TextView name_p2;
TextView name_p3;
TextView fname_p1;
TextView fname_p2;
TextView fname_p3;
TextView level;
TextView id_team;
}
public TeamAdapter(Context context, ArrayList<Team> t) {
super(context, R.layout.item_team, t);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Team t = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
ViewHolder viewHolder; // view lookup cache stored in tag
if (convertView == null) {
// If there's no view to re-use, inflate a brand new view for row
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.item_team, parent, false);
viewHolder.name_p1 = (TextView) convertView.findViewById(R.id.textView_name_p1);
viewHolder.name_p2 = (TextView) convertView.findViewById(R.id.textView_name_p2);
viewHolder.name_p3 = (TextView) convertView.findViewById(R.id.textView_name_p3);
viewHolder.fname_p1 = (TextView) convertView.findViewById(R.id.textView_fname_p1);
viewHolder.fname_p2 = (TextView) convertView.findViewById(R.id.textView_fname_p2);
viewHolder.fname_p3 = (TextView) convertView.findViewById(R.id.textView_fname_p3);
viewHolder.level = (TextView) convertView.findViewById(R.id.textView_nb_lvl);
viewHolder.id_team = (TextView) convertView.findViewById(R.id.textView_id_team);
// Cache the viewHolder object inside the fresh view
convertView.setTag(viewHolder);
} else {
// View is being recycled, retrieve the viewHolder object from tag
viewHolder = (ViewHolder) convertView.getTag();
}
// Populate the data from the data object via the viewHolder object
// into the template view.
viewHolder.name_p1.setText(t.getParticipants().get(0).getName());
viewHolder.name_p2.setText(t.getParticipants().get(1).getName());
viewHolder.name_p3.setText(t.getParticipants().get(2).getName());
viewHolder.fname_p1.setText(t.getParticipants().get(0).getFirstName());
viewHolder.fname_p2.setText(t.getParticipants().get(1).getFirstName());
viewHolder.fname_p3.setText(t.getParticipants().get(2).getFirstName());
viewHolder.level.setText(String.valueOf(t.getLevel()));
viewHolder.id_team.setText(String.valueOf(t.getId()));
// Return the completed view to render on screen
return convertView;
}
}
item_team.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@ id/textView_name_p1"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="206dp"
android:layout_marginTop="7dp"
android:text="TextView"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_name_p2"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="206dp"
android:layout_marginTop="52dp"
android:text="TextView"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_name_p3"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="206dp"
android:layout_marginTop="97dp"
android:text="TextView"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_fname_p1"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="461dp"
android:layout_marginTop="7dp"
android:text="TextView"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_fname_p2"
android:layout_width="251dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="461dp"
android:layout_marginTop="52dp"
android:text="TextView"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_fname_p3"
android:layout_width="252dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="461dp"
android:layout_marginTop="97dp"
android:text="TextView"
android:textSize="30sp" />
<ImageView
android:id="@ id/imageViewP1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="728dp"
android:layout_marginTop="11dp"
android:src="@drawable/pf" />
<ImageView
android:id="@ id/imageViewP2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="730dp"
android:layout_marginTop="55dp"
android:src="@drawable/ps" />
<ImageView
android:id="@ id/imageViewP3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="728dp"
android:layout_marginTop="101dp"
android:src="@drawable/pt" />
<TextView
android:id="@ id/textView_lvl_team"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="36dp"
android:layout_marginTop="6dp"
android:text="Niveau :"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_nb_lvl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="153dp"
android:layout_marginTop="7dp"
android:textSize="30sp" />
<TextView
android:id="@ id/textView_id_team"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="4dp"
android:layout_marginTop="12dp"
android:textSize="20sp" />
</RelativeLayout>
Team.java
public class Team {
private ArrayList<Participant> _team;
private int _level;
private int _id;
/*Builder*/
public Team(int id,ArrayList<Participant>team, int lvl){
this._team = team;
this._level=lvl;
this._id=id;
}
public Team(int id,Participant p1, Participant p2,Participant p3,int lvl){
ArrayList<Participant> team = new ArrayList<Participant>();
team .add(p1);
team.add(p2);
team.add(p3);
this._team = team;
this._level=lvl;
this._id=id;
}
public Team(int id,Participant p1, Participant p2,Participant p3){
ArrayList<Participant> team = new ArrayList<Participant>();
team.add(p1);
team.add(p2);
team.add(p3);
this._team = team;
this._level=p1.getLevel() p2.getLevel() p3.getLevel();
this._id=id;
}
/*Getter amp; Setter*/
public void setParticipants(ArrayList<Participant> team){
this._team=team;
}
public void setParticipants(Participant p1, Participant p2,Participant p3){
ArrayList<Participant> team = new ArrayList<Participant>();
team .add(p1);
team.add(p2);
team.add(p3);
this._team = team;
}
public ArrayList<Participant> getParticipants(){
return _team;
}
public void setLevel(int lvl){
this._level=lvl;
}
public int getLevel(){
return _level;
}
public void setId(int id){
this._id=id;
}
public int getId(){
return _id;
}
}
Комментарии:
1. Я протестировал ваш код, и все в порядке! Можете ли вы подробнее объяснить свою проблему?
2. Вы смотрели видео? Ошибки компиляции нет, но значение счетчика не выбирается при нажатии на него.
3. Хммм интересно… Благодаря вашему комментарию я скопировал свой код в белый проект и заменил его классическим listview, а не пользовательским listview, и теперь он работает… @mostafa3dmax
4. Я думаю, что ваша проблема связана с вашим макетом диалога. ваш TextView перекрывает блесны, и вы не можете видеть значения. измените ширину TextView на
wrap_content
или меньший размер текста и протестируйте снова. вы должны узнать больше о работе с макетами и виджетами позиционирования5. Да, я знаю, что макеты еще не готовы (я работаю в планшетном формате, а не на телефоне, поэтому с моей стороны это не мешает тестировать счетчик) Я хотел решить свою проблему с макетами позже, потому что это менее важно, чем счетчик. Таким образом, проблема не связана с перекрытием, но я не могу сказать, в чем дело…