2012-01-29 5 views
0

こんにちは皆私のアプリケーションで問題があります。私のチェックボックスのチェックは、チェックボックスをチェックしてスクロールダウンするとチェックが消えてしまったのですが、どうなっているのか分かりませんでした。誰もがこれで私を助けることができますか?ヘルプ:) ためのおかげでここに私のコードです:スクロールアップ/ダウン時にチェックボックスが欠けています

public class TaskKiller extends Activity { 
    private static final String TAG = "TaskKillerActivity"; 
    TaskListAdapter adapter; 
    ListView lv; 

    private List<TaskObject> getTasksToKill() { 
     List<TaskObject> tol = new ArrayList<TaskObject>(); 

     for (int i = 0; i < adapter.getCount(); i++) { 
      TaskObject to = adapter.getItem(i); 
      if (to.isToKill()) { 
       tol.add(to); 
      } 
     } 

     return tol; 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 

    } 

    public void loadRunningProcesses() { 

     ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 

     List<RunningAppProcessInfo> appinfolist = activityManager 
       .getRunningAppProcesses(); 

     Log.d(TAG, "AppInfoList Size: " + appinfolist.size()); 

     for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : appinfolist) { 
      TaskObject runningtask = new TaskObject(); 
      runningtask.setPid(runningAppProcessInfo.pid); 
      runningtask.setProcessName(runningAppProcessInfo.processName); 
      adapter.addTask(runningtask); 
     } 
    } 

    class TaskObject { 
     int pid; 
     String processName; 
     private boolean toKill; 

     public int getPid() { 
      return pid; 
     } 

     public void setPid(int pid) { 
      this.pid = pid; 
     } 

     public String getProcessName() { 
      return processName; 
     } 

     public void setProcessName(String processName) { 
      this.processName = processName; 
     } 

     public boolean isToKill() { 
      return toKill; 
     } 

     public void setToKill(boolean toKill) { 
      this.toKill = toKill; 
     } 

    } 

    class TaskListAdapter extends BaseAdapter { 

     private static final String TAG = "TaskListAdapter"; 

     ArrayList<TaskObject> list; 
     Context context; 

     public TaskListAdapter(Context context) { 
      Log.d(TAG, "created new task list adapter"); 
      this.context = context; 
      if (list == null) { 
       list = new ArrayList<TaskKiller.TaskObject>(); 
      } 
     } 

     public void addTask(TaskObject taskObject) { 
      list.add(taskObject); 
     } 

     public void clearTasks() { 
      list.clear(); 
      Log.d(TAG, "list size:" + list.size()); 
      this.notifyDataSetChanged(); 
     } 

     public int getCount() { 
      return list.size(); 
     } 

     public TaskObject getItem(int position) { 
      return list.get(position); 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      RelativeLayout rl = new RelativeLayout(context); 
      TextView textPid = new TextView(context); 
      textPid.setId(222222); 
      textPid.setText(Integer.toString(getItem(position).getPid())); 

      TextView textName = new TextView(context); 
      textName.setId(333333); 
      textName.setText(getItem(position).getProcessName()); 

      CheckBox chckKill = new CheckBox(context); 
      chckKill.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // is chkIos checked? 
        if (((CheckBox) v).isChecked()) { 
         getItem(position).setToKill(true); 
        } 

       } 
      }); 
} 

答えて

3

私は、問題は、あなたがチェックボックスにアイテムのtoKillのステータスを使用していないということだと思います。スクロールすると、getViewで再描画され、空にリセットされます。

は、コンストラクタの後

chckKill.setChecked(((TaskObject) getItem(position)).isToKill()); 

を追加します。

+0

booleanから_CannotをTaskKiller.TaskObject_にキャストする際にエラーが発生しました。このコードをどこに置くのですか?私はこのコードの後に​​置くので? CheckBox chckKill =新しいCheckBox(コンテキスト)。私は正しいです –

+0

@RinggoLacunaDeJesusは、もう一度やり直してください。そして、はい、CheckBoxの後に追加してください。 –

+0

あなたのご協力ありがとうございました。パッケージ名ではなく名前だけを表示するのはどうですか?ここで私のコードでは、これは、ex:_com.google.android_に表示されるパッケージ名です。_google_または_tomcat_のような名前だけです。 –

関連する問題