J'ai conçu un listview en gonflant chaque rangée en utilisant inflat et j'ai changé la couleur des éléments de convertView sur leurs événements click. Mais après avoir fait défiler la liste, les éléments perdent ces changements. Comment puis-je "préserver" leur état et les représenter?Préserver l'état des éléments à l'intérieur de chaque ligne listview
Et il y a une autre question dans mon esprit, en cliquant sur le bouton soumettre, comment puis-je calculer le nombre total de "listitems" qui n'ont pas été cliqués?
before scroll http://69.imagebam.com/download/l4tJZG08i5tM_7SV3K_fHQ/18631/186307764/snap1.png after scroll http://17.imagebam.com/download/CC3cRv0ITi42Fo8WWUs86g/18631/186307781/snap4.png
Voici mon code:
package scf.login;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class firstsubActivity extends Activity
{
//variable declaration
ListView lvSubCat;
Intent action;
Button btnBack,btnSubmit,btnNext;
Boolean submission=false;
Integer unchecked=0;
String[] subStatus = {"","Ok","","","","Ok","","","Alert","","","","Checked","","","Ok","","","Alert",""};
// defining on click listener
android.view.View.OnClickListener lstnr = new android.view.View.OnClickListener()
{
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.btnBack:
Toast.makeText(getApplicationContext(), "Back button clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.btnSubmit:
if(!submission)
{
checkcompletion();
if(unchecked>0)
{
Toast.makeText(firstsubActivity.this, "Complete the precheking of "+unchecked+" intervention(s) highlighted by Gray colour", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(firstsubActivity.this,"Successfully submitted !!",Toast.LENGTH_SHORT).show();
submission=true;
}
}
else
{
updatecofirmation();
}
break;
case R.id.btnNext:
if(submission)
{
nextconfirmation();
}
else
{
Toast.makeText(firstsubActivity.this,"Submit the answers",Toast.LENGTH_SHORT).show();
}
break;
}
}
private void nextconfirmation()
{
AlertDialog.Builder builder = new AlertDialog.Builder(firstsubActivity.this);
builder.setCancelable(false);
builder.setTitle("Confirmation message");
builder.setMessage("Do you want to leave this page ?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent action = new Intent(firstsubActivity.this,cat_subcatActivity.class);
startActivity(action);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(firstsubActivity.this, "No clicked", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
private void updatecofirmation()
{
AlertDialog.Builder builder2 = new AlertDialog.Builder(firstsubActivity.this);
builder2.setCancelable(false);
builder2.setTitle("Confirmation message");
builder2.setMessage("Do you want to update answers ?");
builder2.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
submission=false;
btnSubmit.performClick();
}
});
builder2.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(firstsubActivity.this, "No clicked", Toast.LENGTH_SHORT).show();
}
});
builder2.create().show();
}
private void checkcompletion()
{
unchecked=subStatus.length;
try
{
for(Integer j=0;j<subStatus.length;j++)
{
// CONFUSED
}
}
catch (Exception e) {
e.printStackTrace();
}
finally
{
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.firstsub);
//Binding
lvSubCat = (ListView)findViewById(R.id.lvSubCat);
btnBack = (Button)findViewById(R.id.btnBack);
btnSubmit=(Button)findViewById(R.id.btnSubmit);
btnNext = (Button)findViewById(R.id.btnNext);
//setting listeners
btnBack.setOnClickListener(lstnr);
btnSubmit.setOnClickListener(lstnr);
btnNext.setOnClickListener(lstnr);
//data of subcategories and their status from database
String[] subCat = {"zero","first","second","third","forth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","forteenth","fifteenth","sixteenth","seventeenth","eighteenth","ninteenth"};
String[] subStatus = {"","Ok","","","","Ok","","","Alert","","","","Checked","","","Ok","","","Alert",""};
/*
for(Integer i=0;i<subStatus.length;i++)
{
set the status of each subcategory
}
*/
//setting adapter and binding adapter to the views
MySimpleAdapter adapter1 = new MySimpleAdapter(this,subCat);
lvSubCat.setAdapter(adapter1);
}
//defining customised MySimpleAdapter class inside firstsubActivity class
public class MySimpleAdapter extends BaseAdapter
{
private final Activity context;
private final String[] subCat;
public MySimpleAdapter(Activity context, String[] subCat)
{
super();
this.context = context;
this.subCat = subCat;
}
/*
protected class viewHolder
{
TextView tvOk;
Button btnChecked,btnAlert;
}
*/
@Override
public int getCount() {
// TODO Auto-generated method stub
return subCat.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// final viewHolder holder = new viewHolder();
//inflating
LayoutInflater inflater = context.getLayoutInflater();
convertView = inflater.inflate(R.layout.lstinfl,null);
//binding
final TextView tvOk=(TextView)convertView.findViewById(R.id.tvOk);
final Button btnChecked=(Button)convertView.findViewById(R.id.btnChecked);
final Button btnAlert=(Button)convertView.findViewById(R.id.btnAlert);
//inserting subcategories
tvOk.setText(subCat[position]);
//representing subcategories according to their status
try
{
for(Integer k=0;k<subStatus.length;k++)
{
// CONFUSED
}
}
catch (Exception e) {
// TODO: handle exception
}
finally
{
}
//listeners to change the Color and Status
tvOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
tvOk.setClickable(false);
btnChecked.setClickable(true);
btnAlert.setClickable(true);
tvOk.setBackgroundColor(Color.GREEN);
btnChecked.setBackgroundColor(Color.WHITE);
btnAlert.setBackgroundColor(Color.WHITE);
subStatus[position]="Ok";
}
});
btnChecked.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tvOk.setClickable(true);
btnChecked.setClickable(false);
btnAlert.setClickable(true);
tvOk.setBackgroundColor(Color.BLACK);
btnChecked.setBackgroundColor(Color.YELLOW);
btnAlert.setBackgroundColor(Color.WHITE);
subStatus[position]="Checked";
// action = new Intent(getApplicationContext(), subdescActivity.class);
// startActivity(action);
}
});
btnAlert.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tvOk.setClickable(true);
btnChecked.setClickable(true);
btnAlert.setClickable(false);
tvOk.setBackgroundColor(Color.BLACK);
btnChecked.setBackgroundColor(Color.WHITE);
btnAlert.setBackgroundColor(Color.RED);
subStatus[position]="Alert";
// action = new Intent(getApplicationContext(), subdescActivity.class);
// startActivity(action);
}
});
return convertView;
}
}
}
Merci l'homme! Je veux cordialement voter ++; pour votre réponse. mais je suis débutant ici donc je suis contraint jusqu'à ce que je reçois 15reputations .. –