Probleme pour afficher ou désafficher des CheckBox
Bonjour,
j'ai une page contenant un ListView rempli dynamiquement de CheckBox et de TextView.
J'ai aussi une option "Selectionner"
Je voudrai que les checkbox soit affichées quand je clic sur l'option "Sélectionner"
Hors rien ne se passe.
Voici ci dessous les deux classes ListAdapter pour la construction du listViewer
Receive pour l'activité représentant la page.
J'ai mis en gras les parties du code qui sont directement concerné.
Est ce que vous auriez une idée ?
merci d'avance
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| package rexad.com.smsdatacollect.receiver;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import rexad.com.smsdatacollect.R;
/**
* Created by Yann Binot Local on 20/10/2016.
*/
public class ListAdapter extends ArrayAdapter<SmsData> {
// List context
private final Context context;
// List values
private final List<SmsData> smsList;
private Map<Integer, CheckBox> checkboxByPos = new HashMap<Integer, CheckBox>();
private Map<Integer, LinearLayout> layoutByPos = new HashMap<Integer, LinearLayout>();
private Map<Integer, TextView> textViewByPos = new HashMap<Integer, TextView>();
View rowView;
public ListAdapter(Context context, List<SmsData> smsList) {
super(context, R.layout.activity_receive_data, smsList);
this.context = context;
this.smsList = smsList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.activity_receive_data, parent, false);
SmsData smsData = getItem(position);
final Calendar cal = Calendar.getInstance();
String date = smsData.getDate();
cal.setTimeInMillis(Long.valueOf(date));
Date time = cal.getTime();
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"yyyy/MM/dd - k:mm", Locale.getDefault());
date = dateFormatter.format(time);
String body = smsData.getBody();
String[] split = body.split("@");
TextView tv = new TextView(context);
tv.setText("DATE "+ date +" (yyyy/MM/dd - hh:mm)\n"+
"TEL : "+smsData.getNumber()+ "\n" +
"EXP : " + split[5]+"\n"
+ "VIL : "+ split[1]);
tv.setHeight(350);
CheckBox checkBox = new CheckBox(context);
checkBox.setSelected(false);
checkBox.setVisibility(View.INVISIBLE);
checkBox.setId(position);
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.addView(checkBox);
linearLayout.addView(tv);
checkboxByPos.put(position, checkBox);
layoutByPos.put(position, linearLayout);
textViewByPos.put(position, tv);
return linearLayout;
}
public void updateView(int visibility,View view){
for (int i = 0; i < smsList.size()-1; i++) {
CheckBox cb =(CheckBox) view.findViewById(i);
cb.setVisibility(visibility);
}
notifyDataSetChanged();
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| package exemple.com.collect;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import exemple.com.smsdatacollect.receiver.ListAdapter;
import exemple.com.smsdatacollect.receiver.SmsData;
public class ReceiveDataActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
ArrayAdapter<SmsData> adapter =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_data);
getSupportLoaderManager().initLoader(1, null, this);
final ListView listView = (ListView) findViewById(R.id.receiveSMS);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
SmsData smsData = (SmsData) adapterView.getItemAtPosition(i);
Toast.makeText(ReceiveDataActivity.this, "Ouvrir message", Toast.LENGTH_SHORT).show();
Intent readMessageIntent = new Intent(ReceiveDataActivity.this, ReadMessageActivity.class);
readMessageIntent.putExtra("value", smsData.getBody());
startActivity(readMessageIntent);
}
});
}
@Override
public Loader onCreateLoader(int arg0, Bundle arg1) {
Uri uri = Uri.parse("content://sms/inbox");
CursorLoader cursorLoader = new CursorLoader(this, uri, null, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader arg0, Cursor cursor) {
List<SmsData> listInput = new ArrayList<SmsData>();
// Read the sms data and store it in the list
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
String phone = cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
String body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();
String date = cursor.getString(cursor.getColumnIndexOrThrow("date")).toString();
if(!body.contains("<smsdata>")){
cursor.moveToNext();
continue;
}
SmsData smsdata = new SmsData();
smsdata.setNumber(phone);
smsdata.setBody(body);
smsdata.setDate(date);
listInput.add(smsdata);
cursor.moveToNext();
}
}
adapter = new ListAdapter(this, listInput);
final ListView listView = (ListView) findViewById(R.id.receiveSMS);
listView.setAdapter(adapter);
}
@Override
public void onLoaderReset(Loader arg0) {
}
//Méthode qui se déclenchera lorsque vous appuierez sur le bouton menu du téléphone
public boolean onCreateOptionsMenu(Menu menu) {
//Création d'un MenuInflater qui va permettre d'instancier un Menu XML en un objet Menu
MenuInflater inflater = getMenuInflater();
//Instanciation du menu XML spécifier en un objet Menu
inflater.inflate(R.menu.menusuppression, menu);
return true;
}
//Méthode qui se déclenchera au clic sur un item
public boolean onOptionsItemSelected(MenuItem item) {
//On regarde quel item a été cliqué grâce à son id et on déclenche une action
switch (item.getItemId()) {
case R.id.supprimer:
Toast.makeText(ReceiveDataActivity.this, "Paramètres", Toast.LENGTH_SHORT).show();
return true;
case R.id.checkbox:
Toast.makeText(ReceiveDataActivity.this, "Selectionner", Toast.LENGTH_SHORT).show();
ListView listView = (ListView) findViewById(R.id.receiveSMS);
int visibility = View.VISIBLE;
if(adapter!=null && adapter instanceof ListAdapter) {
((ListAdapter)adapter).updateView(visibility,listView);
}
return true;
}
return false;
}
} |