0

問題を適切に説明できない場合は申し訳ありませんが、現在カフェインを摂取しています。

基本的に、特定の状態をユーザーに宣言するためにアプリケーションが書き込む文字列 "written" があります。

String written = textview.getText().toString().toLowerCase();

書き込みは正常に動作します。

しかし、「書かれた」は定期的に変化するので、過去の「書かれた」のインスタンスを「writtenPast」という名前の配列に記録したいと思います。

arraylist を試しましたが、成功しませんでした。

私のコードは次のようになります。

public void onClick(View v){

String written = textview.getText().toString().toLowerCase();

if(edittext.equals("something"){
testview.setText(result1);

}

if(edittext.equals("somethingelse"){
textview.setText(result2);
}

たとえば、変更前に書き込まれた最後のインスタンスにアクセスできるようにしたいと考えています。

今は result2 で、以前は result1 だったとしましょう。

result1 にアクセスできるようにしたい。

ありがとうございました。

4

4 に答える 4

3
String written = "";
String prevWritten = "";

public void onClick(View v){

   prevWritten = written;
   written = textview.getText().toLowerCase();

   if(prevWritten.isEmpty()){
      prevWritten = written;
   }

   ..other code..
}

編集:リストを使用したコメントに基づく-

List<String> writtens = new ArrayList<String>();


public void onClick(View v){

    writtens.add(textview.getText().toLowerCase());

    /* 
        To get first written: writtens.get(0);
        To get last written: writtens.get(writtens.size() - 1);
        To get in a random postion: writtens.get(indexNumber);

    */

}

ただし、大量の文字列を保存しない方がよいでしょう。むしろ、保存したい文字列の最大数を持ってください。最大 10 個の文字列を格納する場合、書き込みのサイズが既に 10 になっている場合、次の文字列をインデックス 0 に格納します。

于 2013-07-26T11:14:37.333 に答える
3
List<String> pastWrittenStrings = new ArrayList<String>();

上記のリストを使用して、過去に書き込まれたデータを保存し、onClick(View v){

pastWrittenStrings.add(written); // save to the list before it gets modified
written = textview.getText().toString().toLowerCase();

変更される前に、最新の書き込みを取得する

if(!pastWrittenStrings.isEmpty()) {
   pastWrittenStrings.get(pastWrittenStrings.size()-1); // the last entry would be the latest written just before it got modified
}
于 2013-07-26T11:15:52.917 に答える
1

TextWatcherを使用してテキストが変更される前のイベントを取得でき、過去に書き込まれた値ListCharSequenceオブジェクトの に保存できます。

したがって、次のようなものが最適です。

List<CharSequence> writtenPast = new ArrayList<CharSequence>();
EditText edittext = (EditText) findViewById(R.id.edittext);//or whatever
edittext.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        if (!writtenPast.contains(s)) {
            writtenPast.add(s);
        }
    }
    @Override
    public void afterTextChanged(Editable s) {

    }
});

ただし、このアプローチでは望ましくない結果が得られる可能性があり、さらにフィルタリングが必要になる場合があります。ボタンがクリックされるたびに過去に書き込まれた文字列を処理している場合でも、上記の関連コードを使用できます。例えば:

List<CharSequence> writtenPast = new ArrayList<CharSequence>();
EditText edittext = (EditText) findViewById(R.id.edittext);//or whatever
public void onClick(View v) {
    if (v == edittext) {
        if (!writtenPast.contains(edittext.getText())) {
            writtenPast.add(edittext.getText());
        }
    }
}
于 2013-07-26T11:16:37.247 に答える
0

そのテキストの変更が発生したときにイベントを特定する必要があり、ArrayList を使用してそのテキスト フィールドに毎回テキストを追加できます。

于 2013-07-26T11:18:10.303 に答える