CheckedTextView消失时滚动的ListView [英] CheckedTextView disappears when scroll in 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< 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屋!