2012-04-22 14 views
0

インフレータを使用して各行を膨張させることによってリストビューを設計しました。クリックイベントでconvertViewの要素の色を変更しました。しかし、リストをスクロールした後、これらの要素が失われます。どのように私は彼らの状態を "保存"し、それらを表現することができますか?listviewの各行内の要素の状態を保持する

もう1つ質問があります。送信ボタンをクリックすると、クリックされなかった「listitems」の総数はどのように計算できますか?ここで

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

私のコードです:少なくともその一部が良いので

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; 


    } 

} 
} 

答えて

1

さて、あなたは、配列内の両方の状態(テキストおよびステータス)を保存しています。あなたが提出したときに

  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"; 
      } 
      .... 

その後、あなたはこれらのステータス項目を通過し、何を参照することができます:今、あなたのようなものは、それに応じてあなたのボタンの正しいルックアンドフィールを設定するために)(あなたのgetViewメソッドでstates[]をチェックする必要がありますクリックされたかどうか。

+0

ありがとうございました!私は心から++を投票したいと思っています。あなたの答えのために。しかし、私はここで初心者ですので、私は15票を得るまで私は拘束されています.. –

関連する問題