簡體   English   中英

Android上的自定義ListView中的CheckBox

[英]CheckBox in custom ListView on Android

我有一個自定義ListView,我使用自定義列表適配器將三個TextView放入List中! 如何添加每個列表項的CheckBox並使列表項上的每個CheckBox單擊?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#7a4b9d"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/calorie"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="sdf"
        android:textColor="#ffffff" />

    <TextView
        android:id="@+id/price"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="sdf"
        android:textColor="#ffffff" />
    <CheckBox
         android:id="@+id/chkBox1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="CheckBox" />

</LinearLayout> 

主要活動

public class Main_Activity extends Fragment implements OnClickListener {

    private ListView lv;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.main_activity, null);


        ArrayList<SearchResults> searchResults = GetSearchResults();

        final ListView lv = (ListView) root.findViewById(R.id.list_two);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        lv.setTextFilterEnabled(true);
        lv.setAdapter(new MyCustomBaseAdapter(getActivity(), searchResults));

        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position,
                    long id) {

                                  boolean result = searchResults.get(position).isSolved();
                if (result) {
                    searchResults.get(position).setSolved(false);
                } else {
                     searchResults.get(position).setSolved(true);
                }

                 Toast.makeText(getActivity(),"You have chosen: " + " " +
                 fullObject.getPhone(), Toast.LENGTH_SHORT).show();

            }
        });

        return root;

    }

    private ArrayList<SearchResults> GetSearchResults() {
        ArrayList<SearchResults> results = new ArrayList<SearchResults>();

        SearchResults sr = new SearchResults();
        sr.setName("Apple");
        sr.setCalorie("35");
        sr.setPrice("5");
        results.add(sr);

        return results;
    }


}

定制基礎適配器

public class MyCustomBaseAdapter extends BaseAdapter {
    private static ArrayList<SearchResults> searchArrayList;

    private LayoutInflater mInflater;

    public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
        searchArrayList = results;
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return searchArrayList.size();
    }

    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_row_view, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.name);
            holder.txtCalorie = (TextView) convertView
                    .findViewById(R.id.calorie);
            holder.txtPrice = (TextView) convertView.findViewById(R.id.price);
    holder.chkBox1 = (CheckBox)convertView.findViewById(R.id.chkBox1);


        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtName.setText(searchArrayList.get(position).getName());
    holder.txtCalorie.setText(searchArrayList.get(position)
            .getCalorie());
    holder.txtPrice.setText(searchArrayList.get(position).getPrice());
    holder.chkBox1.setChecked(searchArrayList.get(position).isSolved());


    return convertView;
}

static class ViewHolder {
    CheckBox chkBox1;
    TextView txtName;
    TextView txtCalorie;
    TextView txtPrice;
}

搜索結果

public boolean isSolved() {
    // TODO Auto-generated method stub
    return b;
}

public void setSolved(boolean b) {
    // TODO Auto-generated method stub
    this.b = b;
}

您必須首先在custom_row_view.xml文件中定義CheckBox視圖,

<CheckBox android:id="@+id/chkBox1"
 android:layout_width=...
 android:layout_height=... />

然后,您必須在MyCustomBaseAdapter類或您的案例中的持有者中調用此引用,例如

CheckBox chkBox1;

然后,

holder.chkBox1 = = (CheckBox)convertView.findViewById(R.id.chkBox1);

您可以在SearchResults類中定義一個布爾值,該值可以處理chkBox檢查和使用

 holder.chkBox1.setChecked(searchArrayList.get(position).isSolved());

在這些線上的東西,你會很高興:)

編輯:記得在itemClick上更改searchResult實例中的boolean值。

boolean result = searchResults.get(position).isSolved();
if (result) {
    searchResults.get(position).setSolved(false);
} else {
     searchResults.get(position).setSolved(true);
}
lv.getAdapter().notifyDataSetChanged();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM