EDIT(SOLVED)答えは質問の最後にある。Listitemのクリックがチェックボックスで機能しないAndroid
私はリストビューを持っており、customadapterを使っていくつかの行を膨らませています。 膨らんでいる行にチェックボックスがあります。私はチェックボックスのステータスを維持することができますが、問題は、私のリスト項目はクリック可能ではないということです。 は、ここに私のコードです:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fl=(ListView)findViewById(R.id.MainMenu);//Mainmenu is listview
fl.setAdapter(new CustomAdapter(Annotate.this,R.layout.preann2,_dir));//preann2 is row and _dir is the list of objects
//fl.setOnItemClickListener(this); tried this too
}
public void onItemClick(AdapterView<?> a, View view, int pos, long id)
{
//Implementations
}
public class CustomAdapter extends ArrayAdapter<String>
{
public CustomAdapter(Context context, int textViewResourceId,String[] objects) {
super(context, textViewResourceId,objects);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.preann2, parent, false);
try
{
TextView Name=(TextView)row.findViewById(R.id.title);
Name.setText("xyz");
ImageView icon=(ImageView)row.findViewById(R.id.icon);
row.setFocusable(true);
row.setClickable(true);
row.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
checkState[position]=!checkState[position];
}
});
CheckBox c=(CheckBox)row.findViewById(R.id.checkBox);
c.setChecked(checkState[position]);
c.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton v,
boolean isChecked) {
// TODO Auto-generated method stub
CheckBox checkBox=(CheckBox)v;
if (isChecked) {
checkState[position]=true;
}
else
checkState[position]=false;
}
});
/* tried this too
c.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
CheckBox checkBox=(CheckBox)v;
if (checkBox.isChecked()) {
//checkBox.setChecked(false);
checkState[position]=true;
}
else
checkState[position]=false;
}});*/
icon.setImageResource(R.drawable.ic_launcher);
}catch(Throwable err)
{
err.printStackTrace();
}
return row;
}
}
私は、ユーザーが単一の項目のみをクリックしたい場合は、リスト項目がクリック可能になりたいです。
EDIT(アクヒルのご要望に応じて) - レイアウトフォルダ内 preann2.xml:レイアウトフォルダ内の
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="4dip"
>
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="4dip"/>
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true"
android:textStyle="bold" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
はmain.xml:
<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/MainMenu"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
EDIT(解決しよう) チェックボックスに次のプロパティを追加してください:
android:focusable="false"
android:focusableInTouchMode="false"
行がクリックされた場合にチェックボックスをオンにしたい場合は、行自体に 'onClickListener()'を付けて条件を設定します。 –
リストビュー内の項目をクリックすると、他のアクションが必要になります。チェックボックス私はそれらをクリックすることで直接設定することができるので、それに関する問題です。 私は実際にアイテムをクリックするとアクティビティを呼びたいと思っています。 – silentkratos
チェックボックスの 'onClickListener'の中に' log'を追加して、ログが登録されているかどうかを確認してください。 –