2016-01-02 4 views
1

У меня есть ExpandableListView, элементы которого я хочу редактировать. Таким образом, я показывал «диалог редактирования», когда пользователь «longClicks» на элементе. Но после того, как я реализовал onLongClickListener в convertView для группы, он больше не расширяется одним щелчком мыши. Если я прокомментирую код, где я установил onLongClickListener, группа будет расширяться, как ожидалось. Как остановить LongClickListner от кражи события click из конверта группы?ExpandableListView не расширяется при внедрении OnLongClickListener

У других, похоже, была эта проблема, и принятый ответ состоял в том, чтобы вернуть false в LongClickListener, но это не работает для меня.

Вот где я получаю groupView и установить LongClickListener:

... 
@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    final Crew crew = (Crew) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this.context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.crew_item_row, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.crewTxtView); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(crew.getName()); 

    //set ya onlclick listener here too for ya button to add crew member 
    RelativeLayout addMemberBttn = (RelativeLayout) convertView.findViewById(R.id.addCrewMemberBttn); 
    addMemberBttn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showNewMemberDialog(crew.getId()); 
     } 
    }); 

    convertView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      showEditCrewDialog(crew); 
      return false; 
     } 
    }); 

    return convertView; 
} 

Диалога метод Код:

private void showEditCrewDialog(final Crew crew){ 
    final Dialog dialog = new Dialog(context); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setCancelable(false); 
    dialog.setContentView(R.layout.edit_crew_dialog); 

    final EditText crewTextBox = (EditText) dialog.findViewById(R.id.crewEditTxt); 
    crewTextBox.setText(crew.getName()); 
    final ImageView editButton = (ImageView) dialog.findViewById(R.id.editCrewBttn); 
    editButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      crewTextBox.setEnabled(true); 
      crewTextBox.setBackgroundResource(R.drawable.textbox); 
      editButton.setVisibility(View.GONE); 
     } 
    }); 

    Button cancelBttn = (Button) dialog.findViewById(R.id.crewCancelBttn); 
    cancelBttn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
     } 
    }); 

    Button updateBttn = (Button) dialog.findViewById(R.id.updateCrewDialogBttn); 
    updateBttn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(!crewTextBox.isEnabled()) { 
       dialog.dismiss(); 
       return; 
      } 
      String crewName = crewTextBox.getText().toString(); 
      if(crewName.isEmpty()){ 
       Toast.makeText(context, "Crew must have a name...", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      crew.setName(crewName); 
      CrewService crewService = new CrewService(context); 
      if(crewService.updateCrew(crew)==0){ 
       Toast.makeText(context, "Error updating crew...", Toast.LENGTH_SHORT).show(); 
       return; 
      }; 

      notifyDataSetChanged(); 
      Toast.makeText(context, "Crew updated!", Toast.LENGTH_SHORT).show(); 
      dialog.dismiss(); 
     } 
    }); 

    dialog.show(); 
} 
+0

Вы пытались использовать setOnItemLongClickListener для расширения списка? реализация setOnLongClickListener для отдельных просмотров замедлит ваш адаптер. – Srikanth

ответ

1

Вместо в getGroupView, вам следует вызвать setOnItemLongListener из вашей активности. Используйте нижеприведенный код в своей деятельности, где определено расширенное listview.

expandableListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

     Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      showEditCrewDialog(crew); 
      return false; 
     } 
    }); 
0

Использование OnChildClickListener для телескопического просмотра списка

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