2012-06-05 88 views
4

我想從編輯文本的用戶輸入到列表視圖,我已經看到了答案this類似的問題,但我無法弄清楚從編輯文本添加用戶輸入列表視圖

我想這一點,從IDE收到任何錯誤,但

public class ListtestActivity extends Activity { 
/** Called when the activity is first created. */ 

Button bt; 
EditText et; 
TextView tv; 
ListView lv; 
ArrayAdapter<String> adapter; 

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

    bt = (Button) findViewById(R.id.button1); 
    et = (EditText) findViewById(R.id.editText1); 
    tv = (TextView) findViewById(R.id.textView1); 
    lv = (ListView) findViewById(R.id.listView1); 
    String input = et.getText().toString(); 
    String[] values = new String[] {"", input}; 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, values); 
    lv.setAdapter(adapter); 

嘗試了以下也

public class ListtestActivity extends Activity { 
ArrayAdapter<String> m_adapter; 
ArrayList<String> m_listItems = new ArrayList<String>(); 
/** Called when the activity is first created. */ 

Button bt; 
EditText et; 
TextView tv; 
ListView lv; 

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

    bt = (Button) findViewById(R.id.button1); 
    et = (EditText) findViewById(R.id.editText1); 
    tv = (TextView) findViewById(R.id.textView1); 
    lv = (ListView) findViewById(R.id.listView1); 
    m_adapter = new ArrayAdapter<String>(this, R.layout.main, m_listItems); 
    lv.setAdapter(m_adapter); 
    final String input = et.getText().toString(); 

    bt.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      m_listItems.add(new String(input)); 
      m_adapter.notifyDataSetChanged(); 
     } 
    }); 

任何幫助將是極大的不工作讚賞

謝謝

*非常新的Android/Java的/ SO

回答

5
在第二代碼片段

,變化m_adapter

m_adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, m_listItems); 

行然後在字符串中m_listItems

bt.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

     String input = et.getText().toString(); 
     if(null!=input&&input.length()>0){  

     m_listItems.add(input); 

     m_adapter.notifyDataSetChanged(); 

     } 
    } 
}); 
添加
+0

它的工作原理:) 感謝您的幫助薩米爾 –

0

嘗試將字符串添加到適配器而不是listview:

m_adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, m_listItems);//you can delete your previous initialisation 

bt.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     String strAddMe = et.getText().toString(); 
     if(strAddMe != null) 
      m_listItems.add(strAddMe); 

     m_adapter.notifyDataSetChanged(); 

     } 
    } 
}); 

隨着列表視圖知道適配器,該適配器必須瞭解的內容至極爲「適應」到ListView。一旦你知道這意味着你可以使用適配器沒有任何問題;)

此外,你應該閱讀editText遲到你需要它的輸入。

+0

我明白了,我應該得到的EditText的值,當我需要它,而不是得到它爲時尚早。 感謝您的幫助:) –

0

當您創建活動時,您將獲得EditText的值,並且它是空的。將您聲明「輸入」的行放入您的onClick偵聽器中。

bt.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     final String input = et.getText().toString(); 

     m_listItems.add(new String(input)); 
     m_adapter.notifyDataSetChanged(); 
    } 
}); 
+0

我明白了,這意味着我試圖得到EditText的價值太早了,我應該只在需要時才這樣做? 感謝您的幫助:) –

+0

確切地說,當EditText的值發生變化時,它不會更新您的字符串的值,所以您需要在需要時手動獲取它。 –

相關問題