0

チェックボックスがたくさんある設定ページを作成しています。ユーザーは必要なオプションを選択し、送信ボタンを押すと、1;0;1;1;1;0 などのテキスト ファイルに結果が保存されます。1 はチェックされていることを表し、0 はチェックされていないことを表します。

次回のプログラム起動時に、プログラムは設定ファイルを探します。見つからない場合、チェックボックスはデフォルトの true 値 (すべてオン) のままになります。可能であれば、ファイルを読み取り、それに応じてチェックボックスを設定します。この最後のステップで問題が発生しています。トーストを使用すると、プログラムがファイルを見つけて正しく分割し、指定されたチェックボックスの値が正しいことがわかります。setChecked() コードを使用した後の行で、値が 0 かどうかをチェックする if() ブロックで起動するトーストもあります。そのトーストが起動するので、setChecked() コードが読み取られます。ただし、チェックボックスは更新されず、チェックされたままです。ボックスを変更した後、ビューが更新されていないと思います。

完全にサービスではなく、GUI を備えた Android オプションを作成したのはこれが初めてなので、少しわかりません。ボックスが設定された後に画面をすばやく更新する最も簡単な方法は何ですか?それとも他の問題がありますか?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //establish checkBoxes
    checkBatteryLevel = (CheckBox) findViewById(R.id.checkBox1);
    checkBatteryVoltage = (CheckBox) findViewById(R.id.checkBox2);
    checkBluetooth = (CheckBox) findViewById(R.id.checkBox5);
    checkCall = (CheckBox) findViewById(R.id.checkBox4);
    checkCharger = (CheckBox) findViewById(R.id.checkBox3);
    checkScreen = (CheckBox) findViewById(R.id.checkBox8);
    checkWifiPermis = (CheckBox) findViewById(R.id.checkBox6);
    checkWifiCnct = (CheckBox) findViewById(R.id.checkBox7);
    submitButton = (Button) findViewById(R.id.button1);

    Toast toast = Toast.makeText(getApplicationContext(), "Text here", Toast.LENGTH_LONG);

    //check if text settings are there
    textSettings = new File (root, "UsageMonitorSettings.txt");
    if(textSettings.exists())
    {
        toast = Toast.makeText(getApplicationContext(), "File Exists", Toast.LENGTH_LONG);
        toast.show();
        //if present, read it and set buttons accordingly
        try {
            Scanner myScanner = new Scanner(textSettings);
            while (myScanner.hasNextLine())
            {
                String line = myScanner.next();
                toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_LONG);
                toast.show();
                String[] lineArray = line.split(";");
                toast = Toast.makeText(getApplicationContext(), lineArray[0], Toast.LENGTH_LONG);
                toast.show();
                if(lineArray[0].equals("0"))
                {
                    checkBatteryLevel.setChecked(false);
                    toast = Toast.makeText(getApplicationContext(), "batt check changed", Toast.LENGTH_LONG);
                    toast.show();
                }
                if(lineArray[1].equals("0"))
                {
                    checkBatteryVoltage.setChecked(false);
                }
                if(lineArray[2].equals("0"))
                {
                    checkCharger.setChecked(false);
                }
                if(lineArray[3].equals("0"))
                {
                    checkCall.setChecked(false);
                }
                if(lineArray[4].equals("0"))
                {
                    checkBluetooth.setChecked(false);
                }
                if(lineArray[5].equals("0"))
                {
                    checkWifiPermis.setChecked(false);
                }
                if(lineArray[6].equals("0"))
                {
                    checkWifiCnct.setChecked(false);
                }
                if(lineArray[7].equals("0"))
                {
                    checkScreen.setChecked(false);
                }
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    else
    {
        toast = Toast.makeText(getApplicationContext(), "File does not exist", Toast.LENGTH_LONG);
        toast.show();
        //if not, make one with all defaulting to on
        try {
            BufferedWriter myFileWriter = new BufferedWriter(new FileWriter(textSettings));
            myFileWriter.write("1;1;1;1;1;1;1;1");
            myFileWriter.flush();
            myFileWriter.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    submitButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //when button hit update text settings with checked values
            try {
                BufferedWriter myFileWriter = new BufferedWriter(new FileWriter(textSettings, true));
                if(checkBatteryLevel.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkBatteryVoltage.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkCharger.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkCall.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkBluetooth.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkWifiPermis.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkWifiCnct.isChecked())
                {
                    myFileWriter.write("1"+";");
                }
                else
                {
                    myFileWriter.write("0"+";");
                }
                if(checkScreen.isChecked())
                {
                    myFileWriter.write("1");
                }
                else
                {
                    myFileWriter.write("0");
                }
                myFileWriter.flush();
                myFileWriter.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

main.xml の関連部分は次のとおりです。

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="138dp"
    android:layout_height="wrap_content"
    android:text="Battery Level" 
    android:checked="true" />


<CheckBox
    android:id="@+id/checkBox2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Battery Voltage" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Bluetooth State" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Call State" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Charger State" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Screen State" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Wifi Permission" 
    android:checked="true" />

<CheckBox
    android:id="@+id/checkBox7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Wifi Connection" 
    android:checked="true" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Start Service" />
4

1 に答える 1

3

問題はおそらく、

  • onCreate では、最初に設定が存在する場合はそれを読み取り、次に onClickListeners を作成します。
  • メソッド onResume で何をしますか? そこで何かしますか?

これは、 Android Activity Lifecycleをもう少し詳しく調べる必要があることを意味します。

また、設定ファイルは設定の適切な実装ではありません。1 つのアプリケーションで別の Android アプリケーションの設定を読み取る必要がない限り、SharedPreferencesを調べて、アプリケーション全体の設定を保存する必要があります。これは非常に使いやすいものです。

シンプルな UI が必要で、すぐに終了したい場合は、設定 UI 用に特別に設計された特別なアクティビティ: PreferenceActivityがあります。

于 2012-09-05T08:54:47.180 に答える