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();
}
});