1

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

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 个按钮中的每一个调用。此外,一些按钮可能具有相同的文本。我希望能够通过单击文本视图来撤消此文本视图的操作。假设上面的第 5 个按钮设置了第 3 个 textview 的文本。所以当这个textview点击我想: -reinable按钮 -再次设置它可点击 -清空这个textview的文本所以基本上我想撤消按钮的操作。

4

4 回答 4

1

如果你 setClickable(false) 那么你不能点击那个文本视图。因此,也许一个解决方案是添加一个撤消按钮并将您所做的操作存储在 ArrayList 或某种堆栈中。

于 2013-03-22T13:46:29.977 回答
0

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

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

如果您知道上面提到的值,那么您可以轻松撤消设置。

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

于 2013-03-23T01:30:44.773 回答
0

**

更新并寻求其他帮助

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

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

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

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

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 个文本视图和按钮相乘。这种方法可以正常工作,直到位置发生变化。我的意思是,例如,如果我按此顺序按下第 1、第 3 和第 6 个按钮,则这 3 个按钮单击会归档前 3 个文本视图。如果我现在单击第二个文本视图,则此文本视图上的字母返回按钮(实际上此按钮再次启用可点击)并且位置清除。现在,如果按下第 4 个按钮,例如,这将获得第 2 个清除位置,并且问题开始了。发生这种情况是因为创建的文本视图/按钮对永远不会更新。因此,如果第 3 个按钮与第一个 textview 链接,则如果在第二次单击第 3 个按钮时,此链接不会更改,该按钮现在占据了第 3 个 textview 的位置。但我希望更新此链接。我希望你能从上面的描述中理解这个问题。

那么您认为这可以通过改进上述解决方案来完成,还是必须走完全不同的道路?请尝试在您的答案中包含一些与我的代码相关的代码,以便更容易理解,因为我对没有任何相关研究并试图独自阅读和学习的开发很陌生。

于 2013-03-29T19:07:23.603 回答
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;
}

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

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 案例而不是 if 语句,但两者都没有按预期工作。我遇到了一些索引越界错误(并非每次都发生),并且启用了错误按钮并更改为错误字母的问题。因此,总而言之,只有上述 if/else if 方式才能按预期工作。如果代码可以更短更紧凑,我会很好。有什么想法/想法吗?

于 2013-03-31T21:46:53.630 回答