2012-03-24 12 views
2

ここに私のコードがありますが、私はどこか小さな間違いがあることを知っていますが、Androidのnoobであることは分かりません。私は私の検索をしたが役に立たない。ListViewのtextView.setText()は強制終了を引き起こします

SimpleListActivity.java:

public class SimpleListActivity extends ListActivity { 
    /** Called when the activity is first created. */ 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      setListAdapter(new myArrayAdapter(this, COUNTRIES)); 

      ListView lv = getListView(); 
      lv.setTextFilterEnabled(true); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
       // When clicked, show a toast with the TextView text 
       Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
        Toast.LENGTH_SHORT).show(); 
      } 
      }); 
     } 

     static final String[] COUNTRIES = new String[] { 
      "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
      "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", 
      "Armenia", "Aruba", "Australia", "Austria" 
      }; 
} 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout2" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <CheckBox 
      android:id="@+id/checkBox1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      > 
      </CheckBox> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="TextView"> 
      </TextView> 

</LinearLayout> 

がmyArrayAdapter.java:

public class myArrayAdapter extends ArrayAdapter<String> { 

    private final Context context; 
    private final String[] values; 

    public myArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.list_item, values); 
     this.context = context; 
     this.values = values; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.list_item, parent, false); 

     TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
     CheckBox checkbox = (CheckBox) rowView.findViewById(R.id.checkBox1); 
     textView.setText(values[position]); 
     return rowView; 
    } 

} 

メインレイアウトをContentViewとして使用している理由はわかりません。公式のリストビューのチュートリアルではそれを使用せず、リストはうまくいきます。しかし、私はそれがfindViewByIdを使うとき、私はsetContentView(R.layout.main);を使用しなければならないことをネット上で見つけました。 IDがメインビューにない場合は、なぜ私はそれを使用すべきか理解できません。

また、このアプリの強制終了します。私はtextView.setText(values[position]);に問題を絞り込んだ。どこが間違っていますか?

更新は:

03-24 10:55:01.558: E/AndroidRuntime(7279): FATAL EXCEPTION: main 
03-24 10:55:01.558: E/AndroidRuntime(7279): java.lang.NullPointerException 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at com.deepakmittal.simplelist.myArrayAdapter.getView(myArrayAdapter.java:32) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.AbsListView.obtainView(AbsListView.java:1467) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.ListView.makeAndAddView(ListView.java:1745) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.ListView.fillDown(ListView.java:670) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.ListView.fillFromTop(ListView.java:727) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.ListView.layoutChildren(ListView.java:1598) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.AbsListView.onLayout(AbsListView.java:1273) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.View.layout(View.java:7192) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.View.layout(View.java:7192) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.View.layout(View.java:7192) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.View.layout(View.java:7192) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1145) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.os.Looper.loop(Looper.java:130) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at android.app.ActivityThread.main(ActivityThread.java:3835) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
03-24 10:55:01.558: E/AndroidRuntime(7279):  at dalvik.system.NativeStart.main(Native Method) 

ラインのTextViewに32の対応:ListView whose id attribute is 'android.R.id.list' Error when I have the ListView id set correctly

ここでsetContentViewを除去した後logcatだ:それは解決策がここに掲載されているの別のエラーを与えていたように私はsetContentViewを削除しました。 setText(値[位置]); 、私はあなたの問題は、実際にある推測するつもりだあなたのLogcatを表示せずに

 
View rowView = inflater.inflate(R.layout.list_item, null); 

+0

あなたはlogcatを投稿できますか? – dcow

+0

logcatを投稿しました。 –

答えて

2

ListActivityには、画面中央の単一のフルスクリーンリストで構成されるデフォルトレイアウトがあります。ただし、必要に応じて、onCreate()でsetContentView()を使用して独自のビューレイアウトを設定して、画面レイアウトをカスタマイズできます。これを行うには、独自のビューにID "@ + id/list"というIDを持つListViewオブジェクトが含まれている必要があります。カスタマイズされたレイアウトが必要な場合にのみ、setContentView()などを使用する必要があります。 layout.main ..あなたのアプリの強制終了のために今..エラーがどこにあるかを見つけるのは簡単になるように、私はコピーされたので、あなたは

android:id="@+id/listView1" in main.xml 

to 

android:id="@+id/list" 

を変更する以外...私はすべてのエラーがあると思ういけない... ... とをlogcatを投稿する必要がありますコードを試してみました..それはちょうど私のためにうまくいく..

+0

それは多く説明しました。デフォルトのレイアウトについて話すリンクを投稿できますか?あなたが言うまで、それらが存在するかどうかわかりませんでした。私もlogcatを投稿しました。 –

+3

http://developer.android.com/reference/android/app/ListActivity.html – 5hssba

+0

あなたの問題が解決された場合、受け入れられた回答に印を付けてください。人々は間違いが何であるかを見つけようとしません。 .. =] – 5hssba

-1

このコードの代わりにこの

 
View rowView = inflater.inflate(R.layout.list_item, parent, false); 

利用

ArrayAdapter<String> adapter; 

static final String[] COUNTRIES = new String[] { 
      "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
      "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", 
      "Armenia", "Aruba", "Australia", "Austria" 
      }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.edit); 

     lv = (ListView) findViewById(R.id.edit_lv); 
     arrayList = new ArrayList<HashMap<String, String>>(); 

     mDbHelper = new Database_creat(Show.this); 
     mDbHelper.Open(); 
     adapter= new ArrayAdapter<String> 
          (this,ndroid.R.layout.simple_list_item_1,COUNTRIES); 



     lv.setAdapter(adapter); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 

      } 

     }); 

    } 
1

を試してみてくださいあなたが要求されたListAdapterではなくArrayAdapterでsetListAdapter(ListAdapter)を提供しているという事実ですが、これは

もう1つの可能性は、 '値'配列を間違って逆参照していることです(つまり、範囲外の位置に値[位置]でアクセスする)ことです。

うん - 私は推測していることはそれがリストビューを設定することです、あなたのListViewActivityは、それがのにヌルビューを取得それまでは見解取得 "を、リストを反復処理しようとしています。あなたがする必要があるのは、その位置が値配列の範囲内にあることを確認することです。もしそうなら、あなたが通常やっているようにテキストビューを設定してください。そうでない場合はnullを返します。

0

+0

setListAdapterは、http://developer.android.com/resources/tutorials/views/hello-listview.htmlにあるように、ArrayAdapterで正常に動作します。 このコードは、同じコードの拡張バージョンです。私はリスト項目の隣にチェックボックスを置こうとしています。 getView()でnullを返そうとしましたが、それはまだ動作しません。私はlogcatを投稿しました。 –

+0

興味深い。うん、それは何も試していない私の推測のほんの一部です。 – dcow

関連する問題