2012-04-05 127 views
1
public class ClientGame extends Activity implements OnClickListener{ 
Button Answer1, Answer2, Answer3, Answer4; 
TextView txtQuest; 
DatabaseHelper dbHelper; 
Cursor cur; 
String qid; 
String[] _ids = {}; 
ArrayList<String> idList; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.clientgame); 

    dbHelper = new DatabaseHelper(this); 
    cur = dbHelper.getRandomQuestion(); 
    startManagingCursor(cur); 
    qid = cur.getString(cur.getColumnIndex(DatabaseHelper.colID)); 

    idList = new ArrayList<String>(); 
    idList.add(qid);  // i take the current id 

    try 
    { 
     Intent extras = getIntent(); 
     String ID = extras.getStringExtra("_id"); 
     idList.add(ID); // add the previous one 
     _ids = (String[]) idList.toArray(new String[0]); 

     score = (TextView)findViewById(R.id.textView2); 
     score.setText("Your score is " + idList); 
    } 
    catch(Exception e) 
    { 
    } 

    Answer1 = (Button) findViewById(R.id.button1); 
    Answer1.setText(answer1); 
    Answer1.setOnClickListener(this); 
    Answer2 = (Button) findViewById(R.id.button2); 
    Answer2.setText(answer2); 
    Answer2.setOnClickListener(this); 
    Answer3 = (Button) findViewById(R.id.button3); 
    Answer3.setText(answer3); 
    Answer3.setOnClickListener(this); 
    Answer4 = (Button) findViewById(R.id.button4); 
    Answer4.setText(answer4); 
    Answer4.setOnClickListener(this);  

               } 

@Override 
public void onPause() { 
    super.onPause(); 
    finish();   } 

@Override 
public void onClick(View view) { //correct answer check and store skore and id 
    if (view == findViewById(R.id.button1)) 
    {   
     int i = 1; 
     String ID = cur.getString(cur.getColumnIndex("_id")); 

     Intent ini = new Intent(ClientGame.this, ClientGame.class); 
     ini.putExtra("_id", ID); 
     startActivity(ini);    
    } 

    if (view == findViewById(R.id.button2)) 
    { 
     int i = 1; 
     String ID = cur.getString(cur.getColumnIndex("_id")); 

     Intent ini = new Intent(ClientGame.this, ClientGame.class); 
     ini.putExtra("_id", ID); 
     startActivity(ini);    
    } 
    if (view == findViewById(R.id.button3)) 
    { 
     int i = 1; 
     String ID = cur.getString(cur.getColumnIndex("_id")); 

     Intent ini = new Intent(ClientGame.this, ClientGame.class); 
     ini.putExtra("_id", ID); 
     startActivity(ini);    
    } 
    if (view == findViewById(R.id.button4)) 
    { 
     int i = 1; 
     String ID = cur.getString(cur.getColumnIndex("_id")); 

     Intent ini = new Intent(ClientGame.this, ClientGame.class); 
     ini.putExtra("_id", ID); 
     startActivity(ini);    
    } 

} 

} 这里的问题是,在textview上只显示两个ID。最后一个和当前。我想根据用户需要显示所有ID。当然不是无限的。那么我怎么能创建一个数组列表,让我们用十个值来说,并且每次都存储这个id呢?ArrayList只存储两个值

+0

使用静态数组列表,并确保获取ID。 – Tugrul 2012-04-05 19:35:45

+0

你说我应该创建一个有十个值的数组列表(null)然后替换它们?如何用arraylist中的特定idex替换值? – dothedos 2012-04-05 20:07:31

+0

不,只能在arraylist之前使用静态键:) static ArrayList 。另一方面,你可以做你所说的,因为你为你选择的索引添加了值。 – Tugrul 2012-04-05 20:20:28

回答

2

您在列表中只添加两个ID,因此行为是正确的。如果您的活动创建多次,你想使用的值加最后一次,两件事情必须做到:

  • 申报清单作为静态成员:

    静态的ArrayList IDLIST;

  • 改变你分配像这样的方式:

    如果(IDLIST == NULL){ IDLIST =新的ArrayList(); }

这会做你想做的。我建议不要再次启动活动,只需点击按钮即可更新TextView中的文本。

EDIT ------

要更新的TextView,而不是重新开始的活动这样做:

score.setText(score.getText().toString() + ", " + ID) 

我只是增加了一个逗号和新的ID来的结束现有文本。当然,你可能想要以不同的方式进行格式化。显示的文本和新的应该足够好,以获得所需的格式。

+0

是的,我认为,但我无法做到。你能给我一个提示吗? – dothedos 2012-04-05 21:29:42

+0

我编辑了以前的答案,检查最后一部分,了解如何避免再次启动活动。 – azertiti 2012-04-05 21:41:13

+0

我的朋友工作。谢谢!但我完全无法理解它!如果您有时间可以发送电子邮件给我解释。再次感谢 – dothedos 2012-04-05 21:42:29