簡體   English   中英

將自定義布局與CheckedTextView一起用於ListView

[英]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.

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