1

Androidでのプログラミングは初めてで、ユーザーがEditTextを介してテキストを入力できるようにしてListViewを作成しようとしていました。私はついにそれを機能させましたが、なぜ私の最初のアプローチが機能しなかったのかよくわかりません:

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

これにより、アプリの起動時に強制終了が発生しましたが、これはlv.setAdapter(adapter)が原因であることがわかりました。

多くのスタックオーバーフローの質問を通過した後、ArrayListとArrayAdapterを使用する必要がないという1つの答えを見ました。だから私は以下を試しました、そしてそれはうまくいきました:

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

今回は、配列リストを作成しなかったときに完全に機能しました。

したがって、私の質問は、ArrayAdapterで文字列配列を定義/作成しなかったときにこれが機能する理由と、最初のメソッドが機能しなかった理由です。

事前に助けてくれてありがとう、そして私が十分なコードを投稿しなかったら申し訳ありません。

編集: これが私の最初の方法です私は私の最初の方法を再現しようとしました、そしてそれは下にあります:それはまだ最初のように強制的に閉じます。そして、念のために言っておきますが、私の2番目のメソッド(動作します)では、ArrayListを使用せず、arrayAdapter構造の3番目の引数を取りました。また、あなたの答えは私がおそらく「null」として値を持っていたと私に言ったので、私はあなたが正しいと思います。将来使用するためにこれを修正するにはどうすればよいですか?ありがとう!

public class TaskPage extends SherlockActivity {

EditText display;
ListView lv;
ArrayAdapter<String> adapter;
Button addButton;
ArrayList<String> values;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    display = (EditText) findViewById(R.id.editText1);
    lv = (ListView) findViewById(R.id.listView1);
    addButton = (Button) findViewById(R.id.button1);


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


    addButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String task = display.getText().toString();
            values.add(task);
            adapter.notifyDataSetChanged();

        }
    });
4

3 に答える 3

4

2 番目のアプローチが機能したが、最初のアプローチが機能しなかった場合、values少なくとも 1 つの要素がnull. Adapter がこの null 値を TextView にバインドしようとすると、例外がスローされます。
から null データを削除するだけvaluesです。

ArrayAdapter のソース コードから:

T item = getItem(position);
if (item instanceof CharSequence) { // A null value throws an NPE here
    text.setText((CharSequence)item);
} else {
    text.setText(item.toString());
}

考えれば考えるほど、それvalues自体も null になる可能性があります... これは、LogCat エラーとデバッガーが非常に便利な場所です。

于 2013-01-04T18:25:15.507 に答える
0

valuesandが null ではなく、null 要素が含まれていないことを確認した後lv、これは YourActivity で機能するか、子クラスがそれに属します。:

adapter = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_list_item_1, values);
lv.setAdapter(adapter);
于 2013-01-04T18:36:26.700 に答える
0

この投稿は非常に古いですが、私はそれに出くわし、私にとっての修正を追加したいと思いました. ドキュメント ( http://developer.android.com/reference/android/widget/ArrayAdapter.html ) によると、「デフォルトでは、このクラスは、提供されたリソース ID が単一の TextView を参照することを想定しています。」内部に TextView を含む RelativeLayout を使用していました。これは一種の明白ですが、他の誰かを助ける場合に備えて...

于 2013-11-07T15:01:18.783 に答える