撤消按钮操作?

时间:2013-03-22 13:40:38

标签: android

我有一些按钮,当点击每个按钮时,按钮会执行以下操作:

public TextView CurrentPosW(){

    TextView wordletters[] = {wordLetter1, wordLetter2, wordLetter3,
            wordLetter4, wordLetter5, wordLetter6, wordLetter7};

    TextView currentPos = null;
    for(int i=0; i<wordletters.length; i++){
    if(!wordletters[i].getText().toString().equals(("*")) && wordletters[i].getText().toString().equals("")){       
        currentPos = wordletters[i];
        return currentPos;
        }
    }
    return null;

CurrentPos()方法检查7个不同的文本视图,并在每次调用时将文本设置为第一个空文本视图,并从每个7个按钮调用。 还有一些按钮可能具有相同的文本。 我希望能够通过单击文本视图来撤消此textview的操作。 假设上面的第5个按钮设置了第3个文本视图的文本。所以当点击这个textview我想: - 可以按下按钮 - 再次点击它 -empty这个textview的文本 所以基本上我想撤消按钮的动作。

4 个答案:

答案 0 :(得分:1)

如果你setClickable(false),那么你就无法点击那个textview。因此,解决方案可能是添加一个Undo按钮并将您在ArrayList或某种堆栈中执行的操作存储起来。

答案 1 :(得分:0)

要撤消此操作,您必须以某种方式保存上一个操作。单击textview后,您必须知道上次为此视图执行了哪个操作。为此,您需要知道上次更新此特定textview的按钮。

要存储状态,你可以做很多事情。例如,您可以存储textview的id的id和上次更改它的按钮的id,并将其存储为键值对。或者,您可以将顺序值设置为0到n之间的textview,并在1d数组中将数据存储为textview指定的数字作为索引,按钮作为值。或者您可以使用其他方法。但关键是你必须存储针对特定文本视图的信息,哪个按钮上次改变了它。

如果您知道上述值,则可以轻松撤消设置。

正如我所提到的,可能有很多其他方法可以做到这一点,所以你可以想到其他方法。如果我误解了你的问题,请纠正我。

答案 2 :(得分:0)

**

更新并请求其他帮助

** 我已经取得了一些进展,我通过单击按钮动态地将Text添加到Textviews中的方法。 我使用类似解决方案的序列来解决上述问题,但不能按我的意愿工作。我创建了一个数组列表来对按钮点击序列进行排序:

ArrayList<TextView> letterList = new ArrayList<TextView>();

(是的,还有文字视图,但我称之为按钮,将它们与其他字母组分开)。

然后,当使用此代码单击按钮时,我将相应的视图添加到arraylist:

if(letterList.size() < 8 && !letterList.contains(randomLetter1))
        letterList.add(randomLetter1);

现在在textviews上我使用列表来获取按钮的视图(实际上是textview):

String wLetter = wordLetter1.getText().toString();
        if(wLetter.equals(letterList.get(0).toString()))
            letterList.get(0).setText(wLetter);
            letterList.get(0).setClickable(true);
            letterList.get(0).setEnabled(true);
            wordLetter1.setText("");

将所有7个Textviews和按钮乘以上面的内容。 这种方法可以正常工作,直到更改位置。我的意思是,如果我按下这个顺序按第1,第3和第6个按钮,这3个按钮点击文件前3个文本视图。如果我现在点击第二个textview,则此textview上的字母将返回到按钮(实际上此按钮可以再次启用可点击状态)并清除位置。现在如果按下第4个按钮,这将获得第2个清除位置,问题就开始了。 这是因为创建的textview / button对,永远不会更新。因此,如果第3个按钮链接到第一个textview,如果在第二个单击第3个按钮时,此链接不会更改,而第3个按钮现在占据第3个文本视图的位置。 但我想要更新此链接。我希望你能从上面的描述中理解这个问题。

您是否认为可以通过上述解决方案来实现,或者必须遵循完全不同的道路?请尝试在与我的代码相关的答案中包含一些代码,以便更容易理解,因为我在没有任何相关研究的情况下开发并尝试单独阅读和学习是一个新手。

答案 3 :(得分:0)

我找到解决方案的另一个更新

我不能用上述方法找到解决方案(将点击按钮的顺序保存到列表中),所以我尝试了另一种方法。 这次我使用了按钮的可点击/启用属性,通过一种返回禁用/不可点击按钮的方法:

public List<TextView> getFreePos(){
TextView[] randomletters = {randomLetter1, randomLetter2, randomLetter3,
        randomLetter4, randomLetter5, randomLetter6, randomLetter7};
int i;
for( i=0; i<randomletters.length; i++){
if(randomletters[i].isClickable()== false){
    clickable.add(randomletters[i]);
}
}   
return clickable;
}

然后在每个textview上使用它我检查文本视图的文本是否等于第一个列表的对象:

String wLetter = wordLetter1.getText().toString();          
        if(isEmpty(wordLetter1)){
        getFreePos().clear();
        getFreePos();           
        if(clickable.get(0).getText().toString().equals(wLetter)){
            clickable.get(0).setText(wLetter);
            clickable.get(0).setClickable(true);
            clickable.get(0).setEnabled(true);
        }
        else if(clickable.get(1).getText().toString().equals(wLetter)){
            clickable.get(1).setText(wLetter);
            clickable.get(1).setClickable(true);
            clickable.get(1).setEnabled(true);
        }
        else if (clickable.get(2).getText().toString().equals(wLetter)){
            clickable.get(2).setText(wLetter);
            clickable.get(2).setClickable(true);
            clickable.get(2).setEnabled(true);
        }
        else if (clickable.get(3).getText().toString().equals(wLetter)){
            clickable.get(3).setText(wLetter);
            clickable.get(3).setClickable(true);
            clickable.get(3).setEnabled(true);
        }
        else if (clickable.get(4).getText().toString().equals(wLetter)){
            clickable.get(4).setText(wLetter);
            clickable.get(4).setClickable(true);
            clickable.get(4).setEnabled(true);
        }
        else if (clickable.get(5).getText().toString().equals(wLetter)){
            clickable.get(5).setText(wLetter);
            clickable.get(5).setClickable(true);
            clickable.get(5).setEnabled(true);
        }
        else if (clickable.get(6).getText().toString().equals(wLetter)){
            clickable.get(6).setText(wLetter);
            clickable.get(6).setClickable(true);
            clickable.get(6).setEnabled(true);
        }
        }
        wordLetter1.setText("");

这种方式工作正常,但我找不到一种方法来避免所有那些if语句(上面的代码乘以7)。 我试过使用for循环,如下所示:

for (int i=0; i<clickable.size(); i++){
            if (wLetter.equals(clickable.get(i).getText().toString()))
        clickable.get(i).setText(wLetter);
        clickable.get(i).setEnabled(true);
        clickable.get(i).setClickable(true);
        wordLetter3.setText("");
        break;

并且还使用switch case而不是if语句,但两者都没有按预期工作。我有一些索引越界错误(每次都没有发生)和错误按钮的问题启用并更改为错误的字母。 总而言之,只有上面的if / else if方式按预期工作。如果代码可以缩短和更紧凑,我会很高兴。有什么想法/想法吗?