列表视图复制的项目,每6倍视图、项目、列表

2023-09-08 09:30:57 作者:╭君孑╮剑

希望大家好;

我知道这个问题进行了审查先前几次,但长期搜索后,我仍然没有找到一个解决方案。

I know this issue was reviewed earlier couple of times but after a long search I still didn't find a solution.

我的自定义列表视图复制的项目,每6项。

My custom listview duplicates items every 6 item.

已经确认并尝试过:

1 - layout_width和layout_height不包含WRAP_CONTENT

1- layout_width and layout_height doesn't contain wrap_content

2 - 持有人=新的ListViewItem()是内容有任何初始化之前

2- holder = new ListViewItem() is before any initialization of contents

3 - 有一个!convertView = NULL

3- There is a "convertView != null"

4 - holder.linearLayout.getChild()不能在我的情况下使用,因为布局不是线性的。

4- holder.linearLayout.getChild() can't be use in my case because the layout isn't Linear

5 - 清除()

如果有人能帮助我,这是我的codeS

If anyone can help me this is my codes

getView()

public View getView(final int position, View convertView, ViewGroup parent) {  

    ListViewItem item = items.get(position);
    ListViewItem holder;


    View vi=convertView;

    inflater = (LayoutInflater)    getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    if(vi==null){

        vi = inflater.inflate(R.layout.item, null);
        holder = new ListViewItem();
        holder.cb = (CheckBox) vi.findViewById(R.id.Item1);
        holder.sp = (Spinner) vi.findViewById(R.id.Item2);
        holder.title = (TextView) vi.findViewById(R.id.Item3);
        holder.pricetitle= (TextView) vi.findViewById(R.id.item4);
        holder.Descriptiontitle= (TextView) vi.findViewById(R.id.Item5);
        vi.setTag(holder);

    }else{
        holder = (ListViewItem) vi.getTag();
    }



    holder.title.setText(item.ItemTitle);
    holder.pricetitle.setText(item.price+"");
    holder.Descriptiontitle.setText(item.Description);

    return vi;  
}

ListViewItem的类

ListViewItem class

static class ListViewItem{
    public String ItemTitle;
    public int price;
    public String Description;
    public TextView title;
    public TextView pricetitle;
    public TextView Descriptiontitle;
    public CheckBox cb;
    public Spinner sp;
}

MainActivity

MainActivity

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View v = inflater.inflate(R.layout.starterbottom, null);

    ListView myList = (ListView)v.findViewById(R.id.MyListStarter);

    List<ListViewItem> items = new ArrayList<ListViewItem>();

    for(int i=0;i<10;i++){

        items.add(new ListViewItem(){{
            ItemTitle = "Starter Title";
            Description= "Your description goes here";
            price=0;
        }});

    }

    CustomListViewAdapter listadapter = new CustomListViewAdapter(getActivity(), android.R.layout.simple_list_item_1, items);

    myList.setAdapter(listadapter);

    return v;
}

修改

MainmenuActivity.java

MainmenuActivity.java

public class MainmenuActivity extends SlidingActivity{


Button buttononside;
TextView title;
FragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_mainmenu);
    setBehindContentView(R.layout.sidemenu);

    mAdapter = new FragmentAdapter(getSupportFragmentManager());
    mPager = (ViewPager)findViewById(R.id.pager);

    mPager.setAdapter(mAdapter);
    mPager.setOffscreenPageLimit(4);
    mIndicator = (PageIndicator)findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);

    getSlidingMenu().setBehindOffset(200);
    getSlidingMenu().setMode(SlidingMenu.RIGHT);
    getSlidingMenu().setFadeDegree(0.35f);

    title = (TextView) findViewById(R.id.Title);
    title.setText("Starters");




}


public boolean onCreateOptionsMenu(android.view.Menu menu) {
    getMenuInflater().inflate(R.menu.mainmenu, menu);
    return true;
}


public void onClick(View v) {
    getSlidingMenu().toggle();

}

public void changecolor(View v){
    buttononside = (Button) findViewById(v.getId());


    buttononside.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction()==MotionEvent.ACTION_DOWN)
                buttononside.setBackgroundColor(Color.BLACK); 
            else
                buttononside.setBackgroundResource(R.drawable.buttonshape);
            return true;
        }

    });
}


static class ListViewItem{
    public String ItemTitle;
    public int price;
    public String Description;
    public TextView title;
    public TextView pricetitle;
    public TextView Descriptiontitle;
    public CheckBox cb;
    public Spinner sp;
}

}

FragmentAdapter.java

FragmentAdapter.java

public class FragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter{

  public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }

@Override
public int getIconResId(int index) {
    return 0;
}

@Override
public Fragment getItem(int position) 
{
    android.support.v4.app.Fragment fragment = new StarterActivity();
    switch(position){
    case 0:
        fragment = new MainActivity();
        break;
    case 1:
        fragment = new SecondActivity();
        break;
    case 2:
        fragment = new ThirdActivity();
        break;
    case 3:
        fragment = new FourthActivity();
        break;
    }
    return fragment;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 4;
}

@Override
public CharSequence getPageTitle(int position){
    String title = "";
    switch(position){
    case 0:
        title = "First";
        break;
    case 1:
        title = "Second";
        break;
    case 2:
        title = "Third";
        break;
    case 3:
        title = "Fourth";
        break;
    }
    return title;
 }
}

MainActivity.java

MainActivity.java

public class MainActivity extends Fragment {


int i=0;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View v = inflater.inflate(R.layout.starterbottom, null);

    ListView myList = (ListView)v.findViewById(R.id.MyListStarter);

    List<ListViewItem> items = new ArrayList<ListViewItem>();

    for(i=0;i<10;i++){

        items.add(new ListViewItem(){{
            ItemTitle = "Title "+i;
            Description= i+" Your Own description";
            price= i;
        }});

    }

    CustomListViewAdapter listadapter = new CustomListViewAdapter(getActivity(), R.layout.item, items);

    myList.setAdapter(listadapter);

    return v;

    }
 }

在此先感谢, 问候, 克里斯

Thanks in advance, Regards, Chris

推荐答案

我现在看到的问题。不,这里没有重复。开展这几个变化:

I see the problem now. And no, there is no duplication here. Carry out these few changes:

在您的静态类的ListViewItem 添加布尔器isChecked;

static class ListViewItem{
    public String ItemTitle;
    public int price;
    public String Description;
    public TextView title;
    public TextView pricetitle;
    public TextView Descriptiontitle;
    public CheckBox cb;
    public Spinner sp;
    public boolean isChecked;    // <--- added
}

更改项目初始化:

items.add(new ListViewItem(){{
        ItemTitle = "Starter Title";
        Description= "Your description goes here";
        price=i;
        isChecked = false;
    }});

在getView()方法中,在 holder.Descriptiontitle.setText(item.Description); ,地址:

In the getView() method, after holder.Descriptiontitle.setText(item.Description);, add:

holder.cb.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    if (((CheckBox) v).isChecked()) {
                item.isChecked = true;
    } else {
                item.isChecked = false;
            } 
  }
});


if (item.isChecked) {
    holder.cb.setChecked(true);
} else {
    holder.cb.setChecked(false);
}

添加最后关键字 ListViewItem的项目= items.get(位置);

final ListViewItem item = items.get(position);