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更改文本之前获取该事件,并且可以将过去写入的值保存在ListObjectsCharSequence中。

所以像这样的东西效果最好:

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 回答