[英]Using a custom layout with CheckedTextView for a ListView
要填充我的ListView
,我使用一個聲明如下的ArrayAdapter<String>
: myListAdapter =new ArrayAdapter<String>(getActivity(),R.layout.myView,R.id.myTextView);
。 代表我的視圖布局的xml文件是:
<CheckedTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/DescriptionEtape"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:checkMark="?android:attr/textCheckMark"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:checked="false"/>
為了響應用戶的點擊,我添加了: (ListView)FragmentView.findViewById(R.id.myListView)).setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View vue, int position, long id) { ((CheckedTextView)vue.findViewById(R.id.myTextView)).setChecked(!((CheckedTextView)vue.findViewById(R.id.myTextView)).isChecked()); } });
當我觸摸ListView
的條目並正確檢查了相應的條目時, onItemClick
函數將正確執行。 不幸的是,還檢查了單擊時不可見的另一個條目!!!
我的代碼有什么問題?
根據Kintanpatel的答案,在已經在LinearLayout
嵌入CheckedTextView
,我嘗試使用自定義ArrayAdapter<String>
,其getView
函數如下所示:
public View getView(int position,View container,ViewGroup parent){
View view;
view= super.getView(position,container,parent);
((CheckedTextView)vue.findViewById(R.id.myTextView)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((CheckedTextView)v).setChecked(!((CheckedTextView)v).isChecked());
}
});
return(view);
}
而且我仍然有同樣的問題...
最好使用由ArrayAdapter插入的BaseAdapter。 您只需要使用BaseAdapter創建Simple類和exteds,還需要在布局中創建自定義單元格,最后將此適配器應用於ListvView。 您可以使用自定義單元執行所有功能。 下面我為您創建示例。
lay_cell.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">
<CheckBox
android:id="@+id/check_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CheckBox" />
</LinearLayout>
MyAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
/**
* Created by sai on 14-Jul-16.
*/
public class MyAdapter extends BaseAdapter {
private Context mContext;
public MyAdapter(Context mContext) {
this.mContext = mContext;
}
@Override
public int getCount() {
return 10;//return how many cell you want to create
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.lay_cell, parent, false);
final CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBox.setChecked(true);
}
});
return convertView;
}
}
並且不要忘記將此適應器應用於ListView,
listview.setAdapter(new MyAdapter(context));
實際上,在查看了描述了simple_list_item_checked
的xml文件simple_list_item_checked
,我注意到沒有LinearLayout
。 我從自己的xml文件中取消了它,現在一切正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.