2014-01-14 2 views
0

У меня есть макет для элемента списка, который состоит из двух LinearLayouts. То, что я хочу достичь, - это: когда элемент щелкнут, второй LinearLayout должен стать видимым/ушедшим, в зависимости от текущей видимости.Скрыть/показать макет в элементе списка

Я экспериментировал с этим кодом:

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      view.getViewById(R.id.id_of_the_second_linear_layout).setVisibility(View.GONE); 
     } 
    }); 

Однако когда элемент щелкнуло несколько других линейных макеты (в различных элементах) становится видимыми/скрытым. Зачем?

Update:

адаптер:

public class ExpensesCursorAdapter extends SimpleCursorAdapter implements SimpleCursorAdapter.ViewBinder { 

public ExpensesCursorAdapter(Context context, Cursor cursor) { 

     super(context, R.layout.single_expense, cursor, 
      new String[]{ 
       ExpenseContract._AMOUNT, 
       CategoryContract._NAME, 
       ExpenseContract._DATE 
      }, 
      new int[]{ 
       R.id.expense_amount, 
       R.id.expense_category, 
       R.id.expense_date 
      }, 
      CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 

     setViewBinder(this); 
    } 

    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     View v = super.getView(position, convertView, viewGroup); 

     final View expandablePanel = v.findViewById(R.id.expandable_panel); 
     expandablePanel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       expandablePanel.setVisibility(view.getVisibility() == View.GONE ? View.VISIBLE : View.GONE); 
      } 
     }); 
     return v; 
    } 

    @Override 
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
     if (columnIndex == cursor.getColumnIndex(ExpenseContract._AMOUNT)) { 
      return handleAmountView((TextView) view, cursor); 
     } 
     else ... 

     return false; 
    } 

    private boolean handleAmountView(TextView view, Cursor cursor) { 
     TextView textView = (TextView) view; 

     Double amount = ExpenseDbHelper.getAmount(cursor); 
     String formattedAmount = new DecimalFormat("##.00").format(amount); 

     textView.setText(formattedAmount); 

     return true; 
    } 
} 

Каждая деталь LinearLayout уже добавлена ​​в XML, я хочу, чтобы переключить флаг видимости, если это возможно.

+0

Показать адаптер ур. – keshav

ответ

0

Вы пишете свою логику в неверных местах. Вы хотите прослушивать клики просмотров внутри списка. Напишите свою логику в методе Adapter getView. В вашей getView логики может быть, как это

ll1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ll2.setVisibility(View.GONE); 

      } 
     }); 

ll2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ll1.setVisibility(View.GONE); 

      } 
     }); 

Что-то вроде этого.

+0

Несколько элементов обновляются, когда я добавляю этот код к адаптеру и выбираю один элемент: public View getView (int position, View convertView, ViewGroup viewGroup) { Просмотр v = super.getView (position, convertView, viewGroup); v.setOnClickListener (новый View.OnClickListener() { общественного недействительными OnClick (View Вид) { Посмотреть expandablePanel = view.findViewById (R.id.expandable_panel); toggleVisibility (expandablePanel); ); } }); return v; } – user919534

+0

Можете ли вы показать этот код в своем вопросе? Также я вижу, что вы не раздуваете макет в getView()? –

0

Когда вы просматриваете элементы списка, некоторые макеты будут скрываться и отключаться в этом случае, если вы нацеливаете только одно представление, чтобы быть видимым одновременно (это просто рассмотрение одной ячейки за раз), то вы можете сохранить позицию щелкнутого элемента или идентификатор, так как вы используете cursorAdapter. Если вы рассматриваете более чем одну ячейку, сохраните список, в котором вы храните каждый идентификатор ячейки, на которую была нажата.

Передайте список или значение одной позиции в adpater, а в getview сравните идентификатор или позицию, а затем выполните код видимости.

Надеюсь, что этот подсказка поможет.

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