0

我有一些按钮,并且设置了一些文本,我需要这些文本在活动开始时可见。之后,我从 sqlite 数据库为我的所有按钮设置了一些文本,但我不希望在用户单击按钮之前显示该文本。

最简单的解决方案是使用 button.setText(c.getString(int)); 并在单击按钮时从 db 设置该文本,但我的 c 光标不在活动范围内,因此我无法在按钮的 onClick 方法中使用它。我试图将所有内容都放在我的 nextQuestion() 方法中的活动范围内,但这给了我错误。

所以我想我应该隐藏数据库中的所有文本集,直到按下按钮,取消隐藏它。怎么做?或者,如果第一个想法是可能的,那就更好了。

这是我的游戏课:

public class Game extends Activity implements View.OnClickListener{

    Button b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
    MediaPlayer buttonClicks;
    public boolean music;

    LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();

    private String generateWhereClause(){
        StringBuilder result = new StringBuilder();
        for (Long l : mAnsweredQuestions){
            result.append(" AND _ID <> " + l);
        }
        return result.toString();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.game);

        addListenerOnButton();


        nextQuestion();
    }

    private void addListenerOnButton() {
        buttonClicks = MediaPlayer.create(this, R.raw.button);
        b1 = (Button) findViewById(R.id.button1);
        b2 = (Button) findViewById(R.id.button2);
        b3 = (Button) findViewById(R.id.button3);
        b4 = (Button) findViewById(R.id.button4);
        b5 = (Button) findViewById(R.id.button5);
        b6 = (Button) findViewById(R.id.button6);
        b7 = (Button) findViewById(R.id.button7);
        b8 = (Button) findViewById(R.id.button8);
        b9 = (Button) findViewById(R.id.button9);

        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);
        b5.setOnClickListener(this);
        b6.setOnClickListener(this);
        b7.setOnClickListener(this);
        b8.setOnClickListener(this);
        b9.setOnClickListener(this);

    }

    private void nextQuestion() {
        TestAdapter mDbHelper = new TestAdapter(this);
        mDbHelper.createDatabase();

        try{

            mDbHelper.open(); 

            Cursor c = mDbHelper.getTestData(generateWhereClause());

            mAnsweredQuestions.add(c.getLong(0));

            b1.setText(c.getString(2));
            b2.setText(c.getString(3));
            b3.setText(c.getString(4));
            b4.setText(c.getString(5));
            b5.setText(c.getString(6));
            b6.setText(c.getString(7));
            b7.setText(c.getString(8));
            b8.setText(c.getString(9));
            b9.setText(c.getString(10));
        }

            finally{
                mDbHelper.close();
            }

    }

    public void onClick(View v) {
        switch(v.getId()){
        case R.id.button1:
            if(music == true){
                buttonClicks.start();
                    }
            b1.setText(c.getString(2));// this is a good option, but can't use cursor
            b2.setEnabled(true);
            break;
        case R.id.button2:
            if(music == true){
                buttonClicks.start();
                    }
            b3.setEnabled(true);
            break;
        case R.id.button3:
            if(music == true){
                buttonClicks.start();
                    }

            break;
        case R.id.button4:
            if(music == true){
                buttonClicks.start();
                    }
        }

    }

}
4

5 回答 5

0

将String-s 传递到一些变量中的某个中间存储,然后在适当的时候从这些字符串中设置按钮的文本怎么样?

于 2013-04-02T18:10:13.237 回答
0

您正在尝试为更大的潜在问题的症状找到解决方案。如果您在活动之间共享数据时遇到困难,那么您当然不应该朝这个方向前进。

话虽如此,要回答您的具体问题,您可以设置textColorandroid.R.color.transparent.

于 2013-04-02T18:10:55.343 回答
0

没有内置方法可以仅隐藏按钮上的文本,但是您可以简单地将数据库中的值存储在一堆变量中,并且在按下按钮之前不要将它们设置为按钮。

这意味着你应该改变:

b1.setText(c.getString(2));
b2.setText(c.getString(3));
...
b9.setText(c.getString(10));

类似于:

String mButtonText1, mButtonText2, ... mButtonText9; // <-- class members

mButtonText1 = c.getString(2);
mButtonText2 = c.getString(3);
...
mButtonText9 = c.getString(10);

(或者,您可以将这些值放在一个数组中)

然后在onClick()

b1.setText(mButtonText1);

要“隐藏”按钮上的文本,只需setText()使用""or调用null

您可以通过将按钮的文本颜色设置为“透明”来实现相同的效果,但我没有尝试过。

于 2013-04-02T18:11:36.127 回答
0

我认为最好的方法是:

将文本设置为 null 或为空,并且在您的 java 实现中,您设置文本。

像这样:

teste.xml:

<Button android:id="@+button/testebutton" android:text="" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

Teste.java:

Button testeButton = (Button) findViewById(R.button.testebutton);
testeButton.setText("NEW TITLE");
于 2013-04-02T18:13:19.827 回答
0

如何使游标成为(类的)实例变量而不是方法局部变量?也许使用http://en.wikipedia.org/wiki/Lazy_initialization ...

于 2013-04-02T18:17:47.710 回答