2016-03-26 7 views
-1

listViewをクリックしてChecked Text Viewを確認すると、アプリケーションが停止します。ここlist_item.xmlCheckedTextViewはListViewでクリックできません

 <?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="?android:attr/listPreferredItemHeight" 
    android:padding="6dip" > 

    <CheckedTextView 
     android:id="@+id/checkedTextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:gravity="center" 
     android:drawableLeft="?android:attr/listChoiceIndicatorMultiple" 
     /> 

</RelativeLayout> 

ここでは、活動のXMLです:

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

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

    </ListView> 
    <Button 
     android:id="@+id/button1" 
     android:layout_width="127dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Submit" /> 

</LinearLayout> 

が活動のコードは次のとおりです。

 package com.example.arf.mycitymyenvironment; 

import android.app.Activity; 
import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.CheckBox; 
import android.widget.CheckedTextView; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ProblemActivity extends Activity { 
    ListView listView ; 

    String[] values; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_problem); 
//Toast.makeText(ProblemActivity.this,"new activity",Toast.LENGTH_SHORT).show(); 
     listView = (ListView) findViewById(R.id.list); 
     values = new String[] { "Garbage","Water Pollution","Air Pollution" }; 

     // Define a new Adapter 
     // First parameter - Context 
     // Second parameter - Layout for the row 
     // Third parameter - ID of the TextView to which the data is written 
     // Forth - the Array of data 

     final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       R.layout.list_item, R.id.checkedTextView, values); 



     // Assign adapter to ListView 
     listView.setAdapter(adapter); 
     // we want multiple clicks 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
listView.setOnItemClickListener(new CheckBoxClick()); 


/* 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       // ListView Clicked item index 
       int itemPosition = position; 

       // ListView Clicked item value 
       String itemValue = (String) listView.getItemAtPosition(position); 




       //checkbox 
       //checkBox.isChecked(); 

       // Show Alert 
       Toast.makeText(getApplicationContext(), 
         "Position :" + itemPosition + " ListItem : "+itemValue , Toast.LENGTH_LONG) 
         .show(); 


      } 


     }); 
     */ 
    } 

    public class CheckBoxClick implements AdapterView.OnItemClickListener { 

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

      CheckedTextView ctv = (CheckedTextView)arg1; 
      if(ctv.isChecked()){ 
       Toast.makeText(ProblemActivity.this, "now it is unchecked", Toast.LENGTH_SHORT).show(); 
      }else{ 
       Toast.makeText(ProblemActivity.this, "now it is checked", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

} 

毎回、エラーがCheckedTextView ctv = (CheckedTextView)arg1;

です

私はそれを解決するために何ができますか?

+0

arg1'はあなたがCheckedTextView' 'にキャストすることはできません' RelativeLayout'、ある 'ようにするには、' RelativeLayout'内部 'CheckedTextView'を持っています。リストアイテムのレイアウトに他のものを置かない場合は、 'RelativeLayout'を取り除くことができます。それ以外の場合は 'arg1'に対して' findViewById() 'を呼び出して' CheckedTextView'を取得してください。 –

答えて

-1
public class CheckBoxClick implements AdapterView.OnItemClickListener { 

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

     CheckedTextView ctv = (CheckedTextView)findViewById(R.id.checkedTextView); 
     if(ctv.isChecked()){ 
      Toast.makeText(ProblemActivity.this, "now it is unchecked", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(ProblemActivity.this, "now it is checked", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

このコードを試してください。

0

はこれを試してみてください:

public class CheckBoxClick implements AdapterView.OnItemClickListener { 

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

     CheckedTextView ctv = (CheckedTextView)arg1.findViewById(R.id.checkedTextView); 
     if(ctv.isChecked()){ 
      Toast.makeText(ProblemActivity.this, "now it is unchecked", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(ProblemActivity.this, "now it is checked", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

あなたView arg1RelativeLayoutです。 CheckedTextViewRelativeLayout arg1の子であるため、arg1.findViewById(R.id.checkedTextView);

+0

ありがとうたくさんの仕事が! (^_^) – iamneaz

-1

各行のCheckedTextViewのonClickListenerを設定し、onClickイベントはCheckedtextViewの値を切り替えます。

ListViewアダプタのgetViewメソッドに次のコードを追加します。

checkedTextView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         checkedTextView.setChecked(!checkedTextView.isChecked()); 
        } 
       }); 
関連する問題