1

そのため、コード内のイベントの順序が変です。それはおそらく私がまだ見たことのないマイナーなものになるでしょう。Aはそれを持っていて、ボタンをクリックListViewした後から文字列を引っ張っています.EditText

によってEditTextメインに引き戻されているダイアログに住んでいますActivityinterface

今何が起こっているかとEditTextいうと、フィールドに「a」と入力しても何も表示されません。しかし、別のものを追加しようとすると、「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);
    }
}

}

誰でもこれが起こっている場所を見つけることができますか?

4

2 に答える 2

1

単純。

電話arrayAdapter.notifyDataSetChanged()をかける

public void onSignIn(String inputText) {
    siteList.add(inputText);
    //add that here
}
于 2013-02-14T22:10:56.800 に答える
0

アダプターによってバックアップされているデータが変更された場合は、アダプターを呼び出して、アダプター自体を更新notifyDataSetChanged()するように指示する必要があります。ListView

あなたのコードにはそのようなものは見当たりません。

追加するだけです:

アダプターの実装は最適ではありませんが、この場合はそれほど重要ではありません。ConvertView が指定された場合に取得できるように、ViewHolder を作成してビューのタグとして保存する必要があります。ViewHolder は、ビューのすべてのサブビューへの参照を保持する必要があります ( TextViewImageView、更新する必要があるものは何でも)。findViewById()これにより、遅い -への繰り返しの呼び出しが回避されます。

于 2013-02-14T18:39:43.633 に答える