如何设置按钮文本不可见?

时间:2013-04-02 18:01:38

标签: java android sqlite

我有一些按钮,我有一些文本设置,我需要在活动开始时显示该文本。之后我从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();
                    }
        }

    }

}

5 个答案:

答案 0 :(得分:0)

如何将String-s传递给某些变量中的某个中间存储器,然后在适当的时候从这些字符串中设置Buttons的文本?

答案 1 :(得分:0)

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

话虽如此,为了回答您的具体问题,您可以将textColor设置为android.R.color.transparent

答案 2 :(得分: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);

隐藏&#39;按钮上的文字只需使用setText()""拨打null即可。

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

答案 3 :(得分:0)

我认为最好的方法是:

设置text null或empty,并在java实现中设置text。

像这样:

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");

答案 4 :(得分:0)

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