2012-06-16 3 views
0

У меня есть приложение, которое имеет активность, которая показывает журналы сообщений. Дело в том, что пользователь должен иметь возможность выбирать некоторые сообщения, а затем удалять их, как вы можете, когда хотите удалить некоторые sms-сообщения.Лучший способ сделать «удалить макет»?

Каков наилучший способ сделать это? Добавление более подробной информации:

Вот захват с сообщениями.

enter image description here

Вот захват с макетом выбора.

enter image description here

Я хочу знать, как они делают это, чтобы показать CheckBoxes. Использовали ли они два макета?

+0

какой-нибудь код пожалуйста .. так что мы узнаем, что вы используете ... –

+0

Я выложу код позже, им не на ПК ... В любом случае im использует список с адаптером ... – Rothariger

ответ

0

Я хочу знать, как они это делают, чтобы показать флажок, используют ли они 2 раскладки?

Сомневаюсь, что они используют два файла макетов. Поскольку строки очень похожи, очень легко переключаться с макета, который не имеет CheckBox, к макету, который имеет CheckBox, просто изменив видимость. Способ сделать это будет иметь флаг в адаптере, который указывает на наличие CheckBox в строках и обновлять видимость CheckBox на основе этого флага:

boolean checkStatus = false; 

//... 

public void getView(int position, View convertView, ViewGroup parent) { 
    //... 
    if (checkStatus) { 
      checkBox.setVisibility(View.VISIBLE); //show the CheckBox for each row 
    } else { 
      checkBox.setVisibility(View.GONE); // hide the CheckBox for each row 
    } 
    //... 
} 

Тогда, когда пришло время, чтобы показать те CheckBoxes (на клике Button, нажмите кнопку меню и т. д.) вам нужно установить только флаг checkStatus (true для CheckBoxes настоящее время, false в противном случае) и позвонить по телефону notifyDataSetChanged() на свой адаптер.

Конечно, вы можете использовать два макета, один из которых содержит CheckBox и тот, у которого его нет. Но, как правило, вы бы использовали два макета в ListView, когда два макета очень (или существенны) разные (что не относится к вашему случаю). Чтобы реализовать два макета, вам нужно будет использовать методы getItemViewType и getViewTypeCount.

boolean checkStatus = false; 

public int getViewTypeCount() { 
    return 2; // you have two layouts 
} 

public int getItemViewType(int position) { 
    if (checkStatus) { 
      return 1; 
    } else { 
      return 0; 
    } 
} 

Затем в методе getView:

public void getView(int position, View convertView, ViewGroup parent) { 
    int which = getItemViewType(position) 
    // make a switch statement and inflate the correct layout file 
    // based on the which variable if the convertView is null 
    // do stuff; 
} 

Конечно, когда пришло время, чтобы показать CheckBoxes вы должны установить флаг checkStatus снова и вызвать notifyDataSetChanged() на адаптере.

+0

Спасибо, что я хочу знать. – Rothariger

0

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

сразу после этого, звоните notifyDataSetChanged на адаптере. это оно .

+0

Хорошо, я понимаю, что вы говорите, и я уже знаю это, но мой вопрос больше связан с визуальным вопросом и макетами. Мне нужно 2 макета и переключаться между ними? Или есть другой способ? – Rothariger

+0

нет, списокView будет обновлен в соответствии с его адаптером. вам действительно не нужно переключаться или создавать что-либо. –

+0

Думаю, вы меня не понимаете, или я не очень хорошо объясняю. Мне нужно знать, как показывать или скрывать флажок для выбора сообщений, которые будут удалены. Если мне нужно использовать 2 макета или показать или скрыть столбец флажка. Или что-то типа того. – Rothariger

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