2016-11-12 94 views
0

我使用的是ArrayList中,自定义适配器和ListView(使用文本和图像的显示项目被点击一个ListView项目时选择)也选择。改变具有相同的功能复选框,这样点击时点击一次等等的Android的Java - 使用自定义适配器的ListView选择一个复选框,另一行项目

一切工作正常,除了当我点击该行的时候变为打勾并变为十字图像表明该项目已被选定其工作,但问题是,另一个项目几排下来似乎也可以选择这不是我的本意。我看了很多帖子中关于recylerViews和ViewHolder,但他们似乎并不管用。

这里是我的代码的样本;

public void myList() { 
    Info.add(new Stored("Name", 2000, R.drawable.pic1, "My details", false)); 
} 

private class MyListAdapter extends ArrayAdapter<Stored> { 
    public MyListAdapter() { 
     super(MainActivity.this, R.layout.myLayout, Info); 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View itemView = convertView; 
     if (itemView == null) { 
      itemView = getLayoutInflater().inflate(R.layout.listlayout11, parent, false); 
     } 

     // Have defined items to be displayed here 
    } 

private void myonClickItem() { 
    final ListView myList= (ListView) findViewById(R.id.listVierMain); 
    myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) { 

     Stored clickedItem1 = Info.get(position); 
     String currentValItem = ((TextView) viewClicked.findViewById(R.id.item5)).getText().toString(); 

     clickedItem1.SelectedSetter(currentValItem, viewClicked); 


} 


    // Setter used to set data to arrayList 
    public void SelectedSetter(String wasItClicked, View viewClicked) 
{ 
    ImageView checkedImage = (ImageView) viewClicked.findViewById(R.id.checkBoxIMG); // Create new object and assign to control 

    if (wasItClicked.equals("false")) { 
     this.itemChecked = true; 
     checkedImage1.setImageResource(R.drawable.CheckedPic); 
    } 
    else{ 
     this.itemChecked = false; 
     checkedImage1.setImageResource(R.drawable.unCheckedPic); 
    } 
} 
+0

我想你最好也相对于'onItemClick()'方法的代码上传。问题可能在那里! – Robb1

回答

0

它不是一个问题,其Android模式。 ü告诉android适配器,如果你认为它不为null来扩充一行。那么我们在这个位置查看它不是null,android会重用你在第一行创建的行。它的适配器列表如何在android中工作。

+0

通过消除零检查的ImageView似乎确实改变点击。从我可以看到你是正确的这是布局被重用的方式。我只是删除了if(itemView == null){}检查,所以只显示下面的内容; itemView = getLayoutInflater()。inflate(R.layout.listlayout11,parent,false); – user3175140

相关问题