2016-02-27 3 views
0

Я работаю на экране, где я заполняю список с использованием базового адаптера. Каждая строка списка содержит круглое изображение, текстовое представление и флажок. Нажав на кнопку одиночного галочка на панели инструментов, я отображение идентификатора пользователя, соответствующий проверяемая кнопка Но отображается wrongly.I я реализует следующий экран:Выбран флажок неправильно.

Screenshot

1.Bean_Friends

public class Bean_Friends { 
    private String name, url, extension, friendsID; 
    private String friendSelected = "false"; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public String getExtension() { 
     return extension; 
    } 

    public void setExtension(String extension) { 
     this.extension = extension; 
    } 

    public String getFriendsID() { 
     return friendsID; 
    } 

    public void setFriendsID(String friendsID) { 
     this.friendsID = friendsID; 
    } 

    public String getFriendSelected() { 
     return friendSelected; 
    } 

    public void setFriendSelected(String friendSelected) { 
     this.friendSelected = friendSelected; 
    } 
} 

2.Adapter_Friends_Group.java

public class Adapter_Friends_Group extends BaseAdapter { 
    private Context context; 
    public List<Bean_Friends> listBeanFriends; 
    private LayoutInflater inflater; 
    private ApiConfiguration apiConfiguration; 
    private Bean_Friends bean_friends; 


    public Adapter_Friends_Group(Context context, List<Bean_Friends> listBeanFriends) { 
     this.context = context; 
     this.listBeanFriends = listBeanFriends; 
    } 

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

    @Override 
    public Object getItem(int i) { 
     return listBeanFriends.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     if (inflater == null) { 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     if (view == null) { 
      view = inflater.inflate(R.layout.feed_item_friends, null); 
     } 

     //finding different views 
     ImageView pic = (ImageView) view.findViewById(R.id.friendsImage); 
     TextView txtName = (TextView) view.findViewById(R.id.nameFriends); 
     CheckBox chkFriends = (CheckBox) view.findViewById(R.id.chkFriends); 

     bean_friends = listBeanFriends.get(i); 
     String name = bean_friends.getName(); 
     String url = bean_friends.getUrl(); 
     String extension = bean_friends.getExtension(); 
     apiConfiguration = new ApiConfiguration(); 
     String api = apiConfiguration.getApi(); 
     String absolute_url = api + "/" + url + "." + extension; 

     //loading image into ImageView                                   iew 
     Picasso.with(context).load(absolute_url).error(R.drawable.default_avatar).into(pic); 

     //Setting name in the textview 
     txtName.setText(name); 

     //If check box is checked,then add true to bean else add false to bean 
     if (chkFriends.isChecked()) { 
      bean_friends.setFriendSelected("true"); 
     } else { 
      bean_friends.setFriendSelected("false"); 
     } 


     chkFriends.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       CheckBox cb = (CheckBox) view; 
       if (cb.isChecked()) { 
        bean_friends.setFriendSelected("true"); 
        Toast.makeText(context, "Check Box is checked : " + cb.isChecked(), Toast.LENGTH_SHORT).show(); 
       } else { 
        bean_friends.setFriendSelected("false"); 
       } 
      } 
     }); 


     return view; 
    } 
} 

3. Код деятельности, содержащего вид

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.clear(); 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_new_group, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.createGroup: 
      createNewGroup(); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 


public void createNewGroup() { 
    Toast.makeText(NewGroupActivity.this, "clicked", Toast.LENGTH_SHORT).show(); 
    List<Bean_Friends> listBeanFriends = new ArrayList<>(); 
    //Log.e("Size of listbeanFriends", String.valueOf(listBeanFriends.size())); 

    listBeanFriends = adapter_friends_group.listBeanFriends; 
    // Log.e("Size of adapter_friends", String.valueOf(adapter_friends_group.listBeanFriends.size())); 
    Log.e("Size of listbeanFriends", String.valueOf(listBeanFriends.size())); 
    for (int i = 0; i < listBeanFriends.size(); i++) { 
     Log.e("Loop Working", String.valueOf(i)); 
     Bean_Friends bean_friends = listBeanFriends.get(i); 
     String friendID = bean_friends.getFriendsID(); 
     String friendSelected = bean_friends.getFriendSelected(); 
     String friendName = bean_friends.getName(); 
     Log.e("FriendsName", friendName); 
     Log.e("FriendID", friendID); 
     Log.e("friendSelected", friendSelected); 
     if (friendSelected.equals("true")) { 
      Toast.makeText(NewGroupActivity.this, friendID, Toast.LENGTH_SHORT).show(); 
     } else { 
      // Toast.makeText(NewGroupActivity.this,"true",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

Обновленный код:

решаемая проблема после выполнения следующих изменений:

адаптер

public class Adapter_Friends_Group extends BaseAdapter { 
    private Context context; 
    public List<Bean_Friends> listBeanFriends; 
    private LayoutInflater inflater; 
    private ApiConfiguration apiConfiguration; 
    private Bean_Friends bean_friends; 


    public Adapter_Friends_Group(Context context, List<Bean_Friends> listBeanFriends) { 
     this.context = context; 
     this.listBeanFriends = listBeanFriends; 
    } 

    private class ViewHolder { 
     ImageView imageView; 
     TextView txtName; 
     CheckBox chkFriend; 
    } 

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

    @Override 
    public Object getItem(int i) { 
     return listBeanFriends.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

     ViewHolder viewHolder = null; 
     if (inflater == null) { 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     if (view == null) { 
      view = inflater.inflate(R.layout.feed_item_friends, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.imageView = (ImageView) view.findViewById(R.id.friendsImage); 
      viewHolder.txtName = (TextView) view.findViewById(R.id.nameFriends); 
      viewHolder.chkFriend = (CheckBox) view.findViewById(R.id.chkFriends); 
      view.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) view.getTag(); 
     } 

     bean_friends = listBeanFriends.get(i); 
     String name = bean_friends.getName(); 
     String url = bean_friends.getUrl(); 
     String extension = bean_friends.getExtension(); 
     apiConfiguration = new ApiConfiguration(); 
     String api = apiConfiguration.getApi(); 
     String absolute_url = api + "/" + url + "." + extension; 

     //loading image into ImageView                                   iew 
     Picasso.with(context).load(absolute_url).error(R.drawable.default_avatar).into(viewHolder.imageView); 
     //Setting name in the textview 
     viewHolder.txtName.setText(name); 
     //Setting boolean isSelected if the Checkbox is checked 
     viewHolder.chkFriend.setChecked(bean_friends.isSelected()); 
     viewHolder.chkFriend.setTag(bean_friends); 


     viewHolder.chkFriend.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       CheckBox cb = (CheckBox) view; 
       Bean_Friends bean_friends = (Bean_Friends) cb.getTag(); 
       Toast.makeText(context, "Clicked on Checkbox: " + bean_friends.getName() + " is " + cb.isChecked(), Toast.LENGTH_LONG).show(); 
       bean_friends.setIsSelected(cb.isChecked()); 
      } 
     }); 
     return view; 
    } 
} 

Bean

public class Bean_Friends { 
    private String name, url, extension, friendsID; 
    boolean isSelected; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public String getExtension() { 
     return extension; 
    } 

    public void setExtension(String extension) { 
     this.extension = extension; 
    } 

    public String getFriendsID() { 
     return friendsID; 
    } 

    public void setFriendsID(String friendsID) { 
     this.friendsID = friendsID; 
    } 

    public boolean isSelected() { 
     return isSelected; 
    } 

    public void setIsSelected(boolean isSelected) { 
     this.isSelected = isSelected; 
    } 
} 

Метод внутренней деятельности

public void createNewGroup() { 
    StringBuffer responseText = new StringBuffer(); 
    listBeanFriends = adapter_friends_group.listBeanFriends; 
    // Log.e("Size of adapter_friends", String.valueOf(adapter_friends_group.listBeanFriends.size())); 
    Log.e("Size of listbeanFriends", String.valueOf(listBeanFriends.size())); 
    for (int i = 0; i < listBeanFriends.size(); i++) { 
     Log.e("Loop Working", String.valueOf(i)); 
     Bean_Friends bean_friends = listBeanFriends.get(i); 
     String friendID = bean_friends.getFriendsID(); 
     String friendName = bean_friends.getName(); 
     Log.e("FriendsName", friendName); 
     Log.e("FriendID", friendID); 
     Log.e("FriendSelected", String.valueOf(bean_friends.isSelected())); 
     if (bean_friends.isSelected()) { 
      responseText.append("\n" + bean_friends.getName() + " " + bean_friends.getFriendsID()); 
     } 
    } 
    Toast.makeText(NewGroupActivity.this, responseText, Toast.LENGTH_SHORT).show(); 
} 
+0

Что не так? В неправильном положении, а не в круге, проверено, когда вы ожидали, что оно будет проверено или отменено, если вы ожидаете проверки? – MikeT

+0

Например, когда я установил флажок, соответствующий человеку A, он отображает идентификатор человека C. Я думаю, что я делаю ошибку внутри адаптера. –

ответ

2

Я думаю, что ошибка в этой строке: -

//If check box is checked,then add true to bean else add false to bean 
if (chkFriends.isChecked()) { 
    bean_friends.setFriendSelected("true"); 
} else { 
    bean_friends.setFriendSelected("false"); 
} 

Здесь вы устанавливаете 'setFriendSelected' в зависимости от того, отмечен ли chkFriends или нет. В списке Просмотр виды повторно используются, и если вы сказали, что вы проверили «A» как друга, а затем вы прокрутите вниз, то вид «A», возможно, будет повторно использован в «C», и этим кодом «C» теперь будет проверяться как друг. Здесь вы вместо этого хотите раздуть представление checkBox в зависимости от того, является ли «C» вашим другом или нет. Попробуйте это вместо: -

//If check box is checked,then add true to bean else add false to bean 
    if (bean_friends.getFriendSelected().equals("true")) { 
     chkFriends.setChecked(true); 
    } else { 
     chkFriends.setChecked(false); 
    } 

P.S: здесь вы можете использовать шаблон держателя для просмотра для лучшей производительности.

Смежные вопросы