notifyDataSetChanged

Ответить
gbIxaHuE
Сообщения: 27
Зарегистрирован: 21 окт 2013, 00:05

notifyDataSetChanged

Сообщение gbIxaHuE » 12 апр 2014, 19:24

Есть активити, внутри 2 динамических фрагмента. Второй фрагмент содержит 2 вкладки (реализованных через фрагменты).
Во вкладке "Tab1" находится ExpandableListView, в родительских элементах имеются кнопки "добавить". Слушатель кнопки реализован в адаптере ExpandableListView

explist_group.xml
[syntax=java]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dn_explist_groupLLayout"
style="@style/Orange_Other"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/dn_GroupName"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_weight="10"
android:gravity="center_vertical"
android:text="TextView" />

<Button
android:id="@+id/dn_buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="+" />
</LinearLayout>
[/syntax]
По нажатию кнопки "добавить" вызываю DialogFragment. После модификаций данных в диалоге произвожу обновление данных в БД
Вот собственно мы подошли к сути вопроса. Как после закрытия DialogFragment'a (this.dismiss()) обновить данные для адатера и послать ему notifyDataSetChanged.

Tab1.java
[syntax=java]
public class Tab1 extends Fragment {
ArrayList<String> group;
ArrayList<Object> child;
private static String DATE_ID;
private FragmentManager fm;
private Context context;
private AdapterExpList expAdapter;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.context = getActivity();
group = new ArrayList<String>();
child = new ArrayList<Object>();
fm = getFragmentManager();
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
pullArguments();
View vRoot = inflater
.inflate(R.layout.calc_daynote_tab1_fragment, null);
ExpandableListView expLV = (ExpandableListView) vRoot
.findViewById(R.id.tab1_expandableListView);

CrData4Adapter.fillArrays(context, group, child, DATE_ID); //выборка данных из бд в group, child
expAdapter = new AdapterExpList(context, group, child, fm, DATE_ID);
expLV.setAdapter(expAdapter);
return vRoot;
}
[/syntax]

AdapterExpList.java
[syntax=java]
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater lInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = lInflater.inflate(
R.layout.calc_frag_right_daynote_explist_group, null);
}
Button btnAdd = (Button) convertView.findViewById(R.id.dn_buttonAdd);
btnAdd.setFocusable(false);

btnAdd.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
CC_DialogAdd dlgAdd = new CC_DialogAdd ();
dlgAddProd.show(fm_FromDNTab1, "AddDialog");
}

});
[/syntax]
fm_FromDNTab1 - FragmentManager, который прокидываю в адаптер из вкладки "Tab1" при инициализации.

Помогите с данным вопросом. Спасибо.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: notifyDataSetChanged

Сообщение altwin » 14 апр 2014, 11:36

[syntax=java5]
dialog.setOnDismissListener(new OnDismissListener() {

@Override
public void onDismiss(DialogInterface dialog) {

}
})
[/syntax]
т.е. реализуете listener и в нем выполняете необходимый код.
Изображение

gbIxaHuE
Сообщения: 27
Зарегистрирован: 21 окт 2013, 00:05

Re: notifyDataSetChanged

Сообщение gbIxaHuE » 18 апр 2014, 02:31

Спасибо за подсказку на счет DismissListener, но проблема в том, что это объявление проходит внутри AdapterExpList. А вот как из адаптера прокинуть сообщение в класс Tab1
Или нужно из класса Tab1 в AdapterExpList прокинуть эксземпляр созданого ExpListView (expLV) и уже внутри OnDismissListener вызвать expLV.notifyDataSetChanged

Как то очень уж криво это выглядит. Так не должно быть. Должен быть другой выход.

Есть мысль - реализовать показ диалога сразу из класса Tab1 и далее через интерфейс класса DialogFragment ловить любые события, что конечно же решило бы все проблемы. Но тогда подымается вопрос, как получить эвент нажатия кнопки (explist_group.xml) в классе Tab1, чтоб вызвать этот "мною любимый" диалог??

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: notifyDataSetChanged

Сообщение Foenix » 18 апр 2014, 11:28

прямо будет выглядеть при использовании контент-провайдера. Все само собой обновится и не нужно будет выдумывать ничего.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

gbIxaHuE
Сообщения: 27
Зарегистрирован: 21 окт 2013, 00:05

Re: notifyDataSetChanged

Сообщение gbIxaHuE » 18 апр 2014, 15:01

спасибо. сегодня посмотрю с чем его едят.

gbIxaHuE
Сообщения: 27
Зарегистрирован: 21 окт 2013, 00:05

Re: notifyDataSetChanged

Сообщение gbIxaHuE » 21 апр 2014, 02:16

altwin писал(а):[syntax=java5]
dialog.setOnDismissListener(new OnDismissListener() {

@Override
public void onDismiss(DialogInterface dialog) {

}
})
[/syntax]
т.е. реализуете listener и в нем выполняете необходимый код.
к сожалению у диалог фрагмента нет setOnDismissListener.
застрял...

Ответить