CheckedTextView消失时滚动的ListView [英] CheckedTextView disappears when scroll in ListView

查看:246
本文介绍了CheckedTextView消失时滚动的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有自定义的ListView。我使用阵列适配器,以填补我的列表视图行。它完美地工作。当我选择在ListView行,我checkedtextview变得可见。滚动我检查的情况即消失之后。
我怎么能记得我的支票?

感谢的发展帮助。

在这里我的适配器

 包test.cbsmobil.ibb;进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.CheckedTextView;
进口android.widget.TextView;进口的java.util.ArrayList;
公共类ListViewItemsAdapter扩展ArrayAdapter<项目> {私人上下文的背景下;
私人的ArrayList<项目>项目;
私人LayoutInflater六;
私人诠释resLayout;
私人CheckedTextView CTV;
私人诠释的selectedIndex;
公共ListViewItemsAdapter(上下文的背景下,ArrayList的<项目>项目){
    超(背景下,0项);
    this.context =背景;
    this.items =物品;
    VI =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    的selectedIndex = -1;}
@覆盖
众长getItemId(INT位置){    返回的位置;
}@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    视图V = convertView;
    最后一个项目I = items.get(位置);
    如果(我!= NULL){
        如果(i.isSection()){
            ListViewItemsSection SI =(ListViewItemsSection)我;
            V = vi.inflate(R.layout.list_item_section,NULL);            v.setOnClickListener(NULL);
            v.setOnLongClickListener(NULL);
            v.setLongClickable(假);            最终的TextView sectionView =(TextView中)v.findViewById(R.id.list_item_section_text);
            sectionView.setText(si.getTitle());
        }其他{            ListViewItems EI =(ListViewItems)我;
            V = vi.inflate(R.layout.list_item_entry,NULL);            最终的TextView标题=(TextView中)v.findViewById(R.id.list_item_entry_title);            如果(标题!= NULL)
                title.setText(ei.title);        }
    }    返回伏;}
 }

这里是我的MainActivity;
让我来解释一下这个activitys code座。 layerlist是我的ListView。我使用的ListView中多重选择的选择模式多。

  layerlist.setAdapter(适配器);
    layerlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);    layerlist.setOnItemClickListener(新AdapterView.OnItemClickListener(){
        @覆盖
        公共无效onItemClick(适配器视图<>母公司,观景,INT位置,长的id){
            如果(!items.get(位置).isSection()){
                    ListViewItems项目=(ListViewItems)items.get(位置);
                    //adapter.setSelectedIndex(position);
                    Log.d(ListView控件,位置+ item.toString());
                    //视图V = layerlist.getChildAt(位置);
                    视图V = getViewByPosition(位置,layerlist);
                    CheckedTextView CTV =(CheckedTextView)v.findViewById(R.id.ctv);                    如果(!ctv.isChecked()){
                        ctv.setChecked(真);
                        Log.d(选中,Açıldı++ ctv.isChecked());                    }其他{
                        ctv.setChecked(假);
                        Log.d(选中,Kapandı++ ctv.isChecked());
                    }
           }
        }
    });    返回rootView;
}私人查看getViewByPosition(INT POS,ListView控件的ListView){
    最终诠释firstListItemPosition = listView.getFirstVisiblePosition();
    最终诠释lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;    如果(POS&L​​T; firstListItemPosition || POS> lastListItemPosition){
        返回listView.getAdapter()getView(POS,空,ListView控件)。
    }其他{
        最终诠释childIndex = POS - firstListItemPosition;
        返回listView.getChildAt(childIndex);
    }
}


解决方案

我有同样的问题,所以,我用了以下在我的定义适配器方法,我得到的解决方案。

添加下面的ListViewItemsAdapter里面的方法:

  @覆盖
    公众诠释的getCount(){
        返回alUpgradeTour.size();
    }    @覆盖
    公众诠释getItemViewType(INT位置){
        返回的位置;
    }    @覆盖
    公众诠释getViewTypeCount(){        返回的getCount();
    }

试试吧,你也将得到解决。

I have custom ListView. I'm using array adapter to fill my ListViews rows. It worked perfectly. When I select the ListView row, my checkedtextview become visible. After scrolling my checked situation disapper. How can i remember my checks ?

Thanks in helpings.

Here my Adapter

package test.cbsmobil.ibb;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;

import java.util.ArrayList;


public class ListViewItemsAdapter extends ArrayAdapter<Item> {

private Context context;
private ArrayList<Item> items;
private LayoutInflater vi;
private int resLayout;
private CheckedTextView ctv;
private int selectedIndex;


public ListViewItemsAdapter(Context context, ArrayList<Item> items) {
    super(context, 0, items);
    this.context = context;
    this.items = items;
    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    selectedIndex = -1;

}




@Override
public long getItemId(int position) {

    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;


    final Item i = items.get(position);
    if (i != null) {
        if (i.isSection()) {
            ListViewItemsSection si = (ListViewItemsSection) i;
            v = vi.inflate(R.layout.list_item_section, null);

            v.setOnClickListener(null);
            v.setOnLongClickListener(null);
            v.setLongClickable(false);

            final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
            sectionView.setText(si.getTitle());
        } else {

            ListViewItems ei = (ListViewItems) i;
            v = vi.inflate(R.layout.list_item_entry,null);

            final TextView title = (TextView) v.findViewById(R.id.list_item_entry_title);

            if (title != null)
                title.setText(ei.title);

        }
    }

    return v;

}


 }

Here is my MainActivity; Let me explain this activitys code block. layerlist is my ListView. I use choice mode multiple for multiple selection in ListView.

layerlist.setAdapter(adapter);
    layerlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

    layerlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if(!items.get(position).isSection()){


                    ListViewItems item = (ListViewItems) items.get(position);
                    //adapter.setSelectedIndex(position);
                    Log.d("ListView", "Position " + item.toString());
                    //View v = layerlist.getChildAt(position);
                    View v = getViewByPosition(position,layerlist);
                    CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.ctv);



                    if (!ctv.isChecked()) {
                        ctv.setChecked(true);
                        Log.d("Checked", "Açıldı" + " " + ctv.isChecked());

                    } else {
                        ctv.setChecked(false);
                        Log.d("Checked", "Kapandı" + " " + ctv.isChecked());
                    }


           }
        }
    });



    return rootView;
}

private View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}

解决方案

I was got same problem so, i had used following methods in my custom adapter, i got solution.

Add following methods inside your ListViewItemsAdapter:

@Override
    public int getCount() {
        return alUpgradeTour.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {

        return getCount();
    }

Try it, you will also get solution.

这篇关于CheckedTextView消失时滚动的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆