2012-04-22 4 views
0

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; 


    } 

} 
} 

Répondre

1

Eh bien, vous enregistrez les deux états (texte et état) dans des tableaux, donc au moins cette partie est bonne. Maintenant, vous devez vérifier la states[] dans votre getView() pour définir l'apparence correcte et la sensation de vos boutons selon elle, quelque chose comme:

  if (subStatus[position].equals("Ok")) { 
      tvOk.setClickable(false); 
      btnChecked.setClickable(true); 
      btnAlert.setClickable(true); 
      tvOk.setBackgroundColor(Color.GREEN); 
      btnChecked.setBackgroundColor(Color.WHITE); 
      btnAlert.setBackgroundColor(Color.WHITE); 
      subStatus[position]="Ok"; 
      } 
      .... 

Ensuite, lorsque vous vous soumettez peut passer par ces éléments d'état et de voir ce que a été cliqué ou non.

+0

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 .. –

Questions connexes