2011-08-03 9 views
0

現在、私は自分のIDでチェックボックスIDを設定しているBaseAdapterから、私のリストビューにチェックボックスを持っています。 私はアクティビティからこのIDにアクセスします。私はnullポインタの例外を取得ですか?私はまだ私はそのnullポインタの例外があるデバッグ?チェックボックスの問題をクリックしました

チェックボックスのIDを手動で設定することはできません。チェックボックスにはメソッド setId(int id)があります。

checkBox.getId()でnullポインタ例外が発生しましたか? これは私のgetView()で、私はcheckBox idを設定しています。

私がチェックしたCheckBoxをすべて削除する必要があるため、私はこれを行っています。

private void deleteCheckItems() { 
    SparseBooleanArray booleanArray = listView.getCheckedItemPositions(); 
    for (int i = 0; i < listView.getCount(); i++) { 
     if (booleanArray.get(i)) 
      Toast.makeText(getBaseContext(), " the selected index is " + i, Toast.LENGTH_SHORT).show(); 
    } 
} 

私は、このメソッドからnullポインタ例外を取得しています

は編集:私のソースコードとして次のとおりです。

public View getView(int position, View view, ViewGroup parent){ 
    ViewHolder viewHolder; 
    if(view==null){ 
     viewHolder = new ViewHolder(); 
     view = layoutInfalter.inflate(R.layout.item_row,null); 
     viewHolder.checkBox = (CheckBox)view.findViewById(R.id.CheckBoxId); 

     if(VIEW_MODE==-1){ 
      viewHolder.checkBox.setVisibility(View.INVISIBLE); 
     }else{ 
      myAdapter.setViewMode(1); 
      viewHolder.checkBox.setVisibility(View.VISIBLE); 
         viewHolder.checkBox.setId(myList.get(position).getId());  

     } 
     viewHolder.text1= (TextView)view.findViewById(R.id.text1); 
     viewHolder.text2 =TextView)view.findViewById(R.id.text2); 
     view.setTag(viewHolder); 

    }else{ 
     viewHolder = (ViewHolder)view.getTag(); 
    } 
    viewHolder.text1.setText(myList.get(position).getText1()); 
    viewHolder.text2.setText(myList.get(position).getText2()); 
    //viewHolder.checkBox.setId(myList.get(position).getId()); 
    return view; 
} 
+0

シャーを掲載していませんか? –

+0

は回線番号を取得できます。どこでエラーが発生していますか? –

+0

エラーはdeleteCheckItem()メソッドにあります。私のトーストは、それがヌル値を得るので、表示されません。 – Robin

答えて

0

これはあなたを助けるかもしれません!

それは私の作品:チェックボックスに上記のXML変更ImageViewので

ROW.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="center" 
android:background="#ffffff"> 

<RelativeLayout 
android:id="@+id/actionsLayout" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:layout_alignParentRight="true" 
android:paddingRight="10dip" 
android:gravity="center" 
android:paddingBottom="10dip"> 

//change it to CheckBox 
    <ImageView 
android:id="@+id/markFav" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/heart"/> 

</RelativeLayout> 

<RelativeLayout 
android:id="@+id/textLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center_vertical" 
android:layout_toLeftOf="@+id/actionsLayout" 
android:layout_margin="10dip"> 
<TextView 
android:id="@+id/status" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:lines="4" 
android:gravity="center_vertical" 
android:ellipsize="end" 
android:textColor="#000000" 
android:text="Row Text Here"/> 
</RelativeLayout> 

    </RelativeLayout> 

。あなたのrow.xmlに対応するチェックボックスIDにそれをチェックボックスと参照するためにImageViewのを変更してくださいGetViewメソッドの上で

public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      System.out.println("in getView"); 
      ViewHolder holder; 
      if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.row, null); 
      holder = new ViewHolder(); 
      System.out.println("After holder"); 

      holder.name= (TextView) convertView.findViewById(R.id.status); 

    //Change this to Checkbox and also add that checkbox in your ViewHolder and edit your implementation as per required. 
      holder.heart = (ImageView) convertView.findViewById(R.id.image); 
      //do not set on Click Listener if it is a CheckBox 
      holder.heart.setOnClickListener(this); 


      System.out.println("After holder text"); 
      convertView.setTag(holder); 
      } else { 
      holder = (ViewHolder) convertView.getTag(); 

      System.out.println("in else part"); 
      } 
      //convertView.setBackgroundColor((position & 1) == 1 ? Color.WHITE : Color.LTGRAY); 
      System.out.println("After set background"); 

      if(status.size()>0){ 
       holder.name.setText(status.get(position).desc.toString()); 

      } 
      return convertView; 
     } 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch(v.getId()){ 
      case R.id.markFav: 
       System.out.println("**MARK FAV CLICKED"); 
       break; 


      } 
     } 

:あなたのbaseAdapterで

GetViewメソッド:とこのようなあなたのgetViewメソッドを編集また、onClickListenerでBaseAdapterクラスを実装すると、そのベースアダプタクラスでonClickメソッドを取得できるようになります。

あなたは私の意見を得ることを望みます。任意の混乱のためにあなたが完全なコードを表示することができます。..

おかげ

+0

私のシナリオは少し異なります。私はチェックボックスを選択せず​​に、または私がキャンセルメニューを起動してチェックボックスをオフにすることができるように、リストボックスをチェックボックスなしで初期設定した後、メニュー編集が起動またはクリックされると、リストにチェックボックスを設定する必要があります。だから、私のアダプタクラスで何をしたのかは、上記のコードのコードと同じです。選択されているチェックボックスリスト項目を削除できませんでした。どんな提案も役に立ちます – Robin

+0

viewHolder.checkBoxというコードで再生していた解決策が見つかりました。setOnCheckedChangeListener((CompoundButton buttonView、ブーリアンにisChecked){ \t \t \t \t \t \t場合(にisChecked){onCheckedChanged新しいOnCheckedChangeListener(){ \t \t \t \t \t \t \t \t \t \t @Override \t \t \t \t \t公共ボイド \t \t \t \t \t \t \t viewHolder.checkBox.setId(myList.get(position).getId()); \t \t \t \t \t \t \t Toast.makeText(文脈、 "選択されたID" + viewHolder.checkBox.getId()、Toast.LENGTH_LONG).SHOW(); \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t})。今私は自分のIDを格納できるリストを作成する必要があると思う。それは良いですか? – Robin

+0

はい、あなたのアイデアは素晴らしいです..それはDefinetely動作します。あなたはそれを試しましたか? – Shah

関連する問題