0

そのような問題を手伝ってください。たくさんのアイテムを含むScrollViewがあります。その下部に、別のアクティビティからのアイテムのセットを追加します。別のアクティビティからの入力ArrayListを確認し、ScrollViewを使用してアクティビティに適切な数のチェックボックスを追加する必要があります。私はそのようなアイテムを追加します:

public void addFiles()
{

        LinearLayout layout = (LinearLayout) findViewById(R.id.filesList);

        if(!FileManagerActivity.finalAttachFiles.isEmpty())
        {   

            for (int i=0; i<FileManagerActivity.finalAttachFiles.size();i++)
            {   

               View line = new View(this);
               line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT));
               line.setBackgroundColor(0xAA345556);
               informationView= new CheckBox(this);
               informationView.setTextColor(Color.BLACK);
               informationView.setTextSize(16);
               informationView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
               informationView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.file_icon, 0, 0, 0);  
               informationView.setText(FileManagerActivity.finalAttachFiles.get(i).getName().toString());
               informationView.setId(i);
               layout.addView(informationView, 0);
               layout.addView(line, 1);
               layout.postInvalidate();
            }
        }

}

すべてが適切に追加されます。別のArrayListを作成するよりも、チェックボックスのチェック可能な状態を保存する必要があります。

for(int b=0;b<FileManagerActivity.finalAttachFiles.size();b++){    
   checks.add(b,0);  
} 
btnClose.setOnClickListener(new View.OnClickListener() {

  public void onClick(View view) {
     moveTaskToBack(true);
  } 
});

ここFileManagerActivity.finalAttachFilesで、は別のアクティビティのArrayListです。チェック可能な状態を次のように保存します。

public void getChecked()
{  

    LinearLayout layout = (LinearLayout) findViewById(R.id.filesList);
    View v = null;
    for(int i=0; i< FileManagerActivity.finalAttachFiles.size(); i++) {

    v = layout.getChildAt(i);     
    CheckBox checkBox = (CheckBox) findViewById(i);
   boolean checked=checkBox.isChecked();
    if (checked)
    {  
     checks.set(i, 1);
    }
    else
    {
        checks.set(i, 0);
    }
  }
}

次に、ボタンでチェックした項目を削除したいと思います。私はそのようにします:

btnFilesRemove.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

    LinearLayout layout = (LinearLayout) findViewById(R.id.filesList);
    getChecked();
    for (int i=0;i< checks.size();i++)
    {

    if (checks.get(i)==1)
    {  
        View v = layout.getChildAt(i);   
        ViewGroup parent = (ViewGroup) v.getParent();
        parent.removeView(v);
        layout.invalidate();
    }
    else
    {
        Log.i("wasn't checked",Integer.toString(checks.get(i)));
    }

  }
 }
});

しかし、私がそれをするとき、アイテムだけが削除されることができて、チェックされたものは削除できません。そして、もう一度削除しようとすると、:が表示されます。

09-03 13:12:32.569: E/AndroidRuntime(1600): FATAL EXCEPTION: main
09-03 13:12:32.569: E/AndroidRuntime(1600): java.lang.NullPointerException
09-03 13:12:32.569: E/AndroidRuntime(1600):     at com.assignmentexpert.NewOrderActivity.getChecked(NewOrderActivity.java:307)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at com.assignmentexpert.NewOrderActivity$4.onClick(NewOrderActivity.java:149)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.view.View.performClick(View.java:2485)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.view.View$PerformClick.run(View.java:9080)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.os.Handler.handleCallback(Handler.java:587)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.os.Looper.loop(Looper.java:123)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at android.app.ActivityThread.main(ActivityThread.java:3687)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at java.lang.reflect.Method.invokeNative(Native Method)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at java.lang.reflect.Method.invoke(Method.java:507)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-03 13:12:32.569: E/AndroidRuntime(1600):     at dalvik.system.NativeStart.main(Native Method)

ListViewを使用してこれを実装しようとしましたが、ScrollViewを使用しているために視覚化に問題が発生しますが、機能は正常に機能しました...より良い方法で実装するにはどうすればよいですか:LinearLayoutまたはListViewの実装を続行してください。

4

1 に答える 1

0

作成したすべてのチェックボックスに onCheckChangeListener を設定します

informationView.setTag(i);   
informationView.setOnCheckedChangeListener(new OnCheckedChangeListener{ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ 
        final Integer position=(Integer) buttonView.getTag(); 
        if(position!=null){  
            if (ischecked){  
                checks.set(i, 1);
            }else {
                checks.set(i, 0);
            }
        } 
    } 
});
于 2012-09-04T03:52:52.630 に答える