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