1

所以我在我的代碼中有奇怪的事件順序。這可能是我還沒有看到的小事。 A有ListView,並且在單擊按鈕後從EditText中拉取字符串。ListView在創建第二個項目後顯示項目

EditText生活在一個對話框,就是BEING由interface

現在會發生什麼拉回到主Activity,是當我鍵入EditText領域的東西說「是」,什麼也不顯示。但是當我去添加另一個「b」時,「a」出現。等等。所以必須創建一個爲了以前出現。

這是我所擁有的。

public class NewActivity extends FragmentActivity implements AddSiteDialog.AddSiteDialogListener { 

ListView mSiteListView; 
ArrayList<String> siteList = new ArrayList<String>(); 
CustomAdapter arrayAdapter = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_site); 
    mSiteListView = (ListView) findViewById(R.id.siteAddList); 
    arrayAdapter = new CustomAdapter(); 
    mSiteListView.setAdapter(arrayAdapter); 
    Button b = (Button) findViewById(R.id.addSiteButton); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showDialog(); 
     } 
    }); 
} 

public void showDialog() { 
    FragmentManager fm = getSupportFragmentManager(); 
    AddSiteDialog addSiteDialog = new AddSiteDialog(); 
    addSiteDialog.show(fm, "main"); 
} 

public void onSignIn(String inputText) { 
    siteList.add(inputText); 

} 

class CustomAdapter extends ArrayAdapter<String> { 
    CustomAdapter() { 
     super(NewActivity.this, R.layout.add_site, siteList); 
    } 
    public View getView(int position, View convertView, ViewGroup parent){ 
     View row = convertView; 

     if (row == null){ 
      LayoutInflater inflater = getLayoutInflater(); 
      row = inflater.inflate(R.layout.list_row, parent, false); 
     } 

     ((TextView) row.findViewById(R.id.textViewId)).setText(siteList.get(position)); 

     return (row); 
    } 
} 

}

任何人都可以那個地方,這是怎麼回事?

回答

0

如果適配器支持的數據發生更改,則需要在適配器上調用notifyDataSetChanged()以指示ListView進行自我更新。

我在代碼中沒有看到類似的東西。

我想補充:

適配器實現是次優的 - 儘管在這種情況下,它並不重要。 您應該創建一個ViewHolder並將其存儲爲您的View的標記,以便您在檢索到convertView時檢索它。 ViewHolder應該保持對你視圖中所有子視圖的引用(TextView,ImageView,無論你需要更新)。這將避免重複呼叫findViewById() - 這很慢。

+0

剛看了,谷歌IO視頻一個小時左右,以前......我完全理解你在說什麼:) – 2013-02-14 22:07:04

1

簡單。

電話arrayAdapter.notifyDataSetChanged()

public void onSignIn(String inputText) { 
    siteList.add(inputText); 
    //add that here 
}