Utilisation d’une ListView
Posted on: 27 novembre 2021 /
Categories: Androïd
Cet article est la suite de l’article implémentant un Client Androïd REST.
CustomListAdapter.java :
package org.libreapps.rest;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import org.libreapps.rest.obj.Product;
import java.util.ArrayList;
public class CustomListAdapter extends BaseAdapter {
private ArrayList<Product> listData;
private LayoutInflater layoutInflater;
private Context context;
public CustomListAdapter(Context aContext, ArrayList<Product> listData) {
this.context = aContext;
this.listData = listData;
layoutInflater = LayoutInflater.from(aContext);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.activity_custom_list_view, null);
holder = new ViewHolder();
holder.id = (TextView) convertView.findViewById(R.id.textId);
holder.name = (TextView) convertView.findViewById(R.id.textName);
holder.type = (TextView) convertView.findViewById(R.id.textType);
holder.price = (TextView) convertView.findViewById(R.id.textPrice);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
Log.v("position",""+position);
}
if(position % 2 == 0){
convertView.setBackgroundColor(Color.rgb(150,245,170));
}
Product product = this.listData.get(position);
holder.id.setText(""+product.getId());
holder.name.setText(product.getName());
holder.type.setText(product.getType());
holder.price.setText(""+product.getPrice());
Log.v("CUSTOM",""+product.getName()+" "+product.getType());
return convertView;
}
static class ViewHolder {
TextView id;
TextView name;
TextView type;
TextView price;
}
public int getCount() {
return (listData!=null)?listData.size():0;
}
public Object getItem(int position) {
return listData.get(position);
}
public long getItemId(int position) {
return position;
}
}
MainActivity.java :
package org.libreapps.rest;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ListView;
import org.libreapps.rest.obj.Product;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Product> listData = getListData();
final ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new CustomListAdapter(this, listData));
// When the user clicks on the ListItem
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = listView.getItemAtPosition(position);
Product upload = (Product) o;
Intent intent = new Intent(MainActivity.this, EditActivity.class);
intent.putExtra("id", upload.getId());
intent.putExtra("name", upload.getName());
intent.putExtra("type", upload.getType());
intent.putExtra("price", upload.getPrice());
startActivity(intent);
}
});
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, EditActivity.class);
startActivity(intent);
}
});
}
public ArrayList<Product> getListData(){
try{
ConnectionRest connectionRest = new ConnectionRest();
connectionRest.execute("GET");
String listJsonObjs = connectionRest.get();
if(listJsonObjs != null) {
return connectionRest.parse(listJsonObjs);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
}
Activity_custom_list_view.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxHeight="45dp">
<TextView
android:id="@+id/textId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:gravity="center_vertical|start"
android:text="ID"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textName"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:gravity="center_vertical|start"
android:text="Name"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textType"
app:layout_constraintStart_toEndOf="@+id/textId"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="34dp"
android:layout_marginRight="34dp"
android:layout_marginBottom="8dp"
android:text="Price"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/textType"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:text="Type"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textPrice"
app:layout_constraintStart_toEndOf="@+id/textName"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
EditActivity.java :
package org.libreapps.rest;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;
public class EditActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
final int id = getIntent().getIntExtra("id", 0);
String name = getIntent().getStringExtra("name");
String type = getIntent().getStringExtra("type");
double price = getIntent().getDoubleExtra("price", 1.0);
final EditText nameEditTxt = (EditText) findViewById(R.id.nameEditTxt);
final EditText typeEditTxt = (EditText) findViewById(R.id.typeEditTxt);
final EditText priceEditTxt = (EditText) findViewById(R.id.priceEditTxt);
TextView idTxt = (TextView) findViewById(R.id.textview_id);
Button buttonCancel = (Button) findViewById(R.id.button_cancel);
Button buttonOk = (Button) findViewById(R.id.button_ok);
if(id!=0){
idTxt.setText(""+id);
nameEditTxt.setText(name);
typeEditTxt.setText(type);
priceEditTxt.setText(""+price);
buttonCancel.setText("Supprimer");
buttonOk.setText("Modifier");
}
buttonCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(id!=0){ // Suppression
try {
ConnectionRest connectionRest = new ConnectionRest();
JSONObject product = new JSONObject();
product.put("id", id);
connectionRest.setObj(product);
connectionRest.execute("DELETE");
} catch (JSONException e) {
e.printStackTrace();
}
}
Intent intent = new Intent(EditActivity.this, MainActivity.class);
startActivity(intent);
}
});
buttonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
ConnectionRest connectionRest = new ConnectionRest();
JSONObject product = new JSONObject();
if(id!=0) {
product.put("id", id);
}
product.put("name", nameEditTxt.getText().toString());
product.put("type", typeEditTxt.getText().toString());
product.put("price", Double.parseDouble(priceEditTxt.getText().toString()));
connectionRest.setObj(product);
if(id!=0) { // Modification
connectionRest.execute("PUT");
}else{ // Creation
connectionRest.execute("POST");
}
Intent intent = new Intent(EditActivity.this, MainActivity.class);
startActivity(intent);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
activity_edit.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".EditActivity">
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview_lbid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID"
android:textSize="14sp" />
<TextView
android:id="@+id/textview_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="40px"
android:text="ID"
android:textSize="14sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nom :"
android:textSize="14sp" />
<EditText
android:id="@+id/nameEditTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Nom"
android:textSize="14sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Type :"
android:textSize="14sp" />
<EditText
android:id="@+id/typeEditTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Type"
android:textSize="14sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Prix :"
android:textSize="14sp" />
<EditText
android:id="@+id/priceEditTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal"
android:text="1.0"
android:textSize="14sp" />
</TableRow>
</TableLayout>
<Button
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Annuler"
app:layout_constraintEnd_toStartOf="@+id/button_ok"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tableLayout" />
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="24dp"
android:text="Créer"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/button_cancel"
app:layout_constraintTop_toBottomOf="@+id/tableLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
La suite : Utilisation d’un Client Androïd JWT
Code source : https://github.com/emunier/Rest-listview.git
Source :
https://www.youtube.com/watch?v=Mja5YoL9Jak
