2015-04-27 7 views
0

Я создал специальный диалоговый интерфейс (определенный в отдельный фрагмент), который вызывается из фрагмента, если это необходимо. Этот диалоговый интерфейс раздувает listView, поэтому я назвал адаптер пользовательского списка (расширенный базовый адаптер). Теперь я хочу ссылаться на глобальную переменную, определенную в фрагменте диалога из адаптера пользовательского списка. Как мне это сделать?Как ссылаться на глобальную переменную в фрагменте из класса ANDROID

EDIT

Я хочу добиться диалогового фрагмента с помощью этого пользовательского макета:

 ****DIALOG TITLE**** 
ListView where each row have this layout: 
    ICON - SOME TEXT - SwitchWidget 

У меня есть этот фрагмент:

public class FilterDialogFragment extends DialogFragment { 

//Checked is a class that store some info 
public ArrayList<Checked> mSelectedItem; <--- variable i want to modify 

public static FilterDialogFragment newInstance(ArrayList<Checked> checked) { 
    FilterDialogFragment fragment = new FilterDialogFragment(); 

    Bundle args = new Bundle(); 


    args.putParcelableArrayList("ARRAYLIST_STRING", checked); 

    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    mSelectedItem = getArguments().getParcelableArrayList("ARRAYLIST_STRING"); 

    String[] checkItem = new String[mSelectedItem.size()]; 
    boolean[] isChecked = new boolean[mSelectedItem.size()]; 


    for(int i=0; i<mSelectedItem.size(); i++) { 
     checkItem[i]=""+mSelectedItem.get(i).getWhatChecked(); 
     if(mSelectedItem.get(i).getShow()==1) { 
      //show 
      isChecked[i]=true; 
     } else { 
      isChecked[i]=false; 
     } 
    } 

    final Dialog dialog = new Dialog(getActivity()); 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    View view = inflater.inflate(R.layout.dialog_layout, null); 

    ListView lv = (ListView) view.findViewById(R.id.custom_list); 
    Button ok_button = (Button) view.findViewById(R.id.ok_button); 

    ok_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, getActivity().getIntent()); 
      dialog.dismiss(); 
     } 
    }); 

    CustomListAdapterDialog mAdapter = new CustomListAdapterDialog(getActivity()); 
    mAdapter.addItem(new DialogModel(R.color.green, checkItem[i], isChecked[i])); 

    lv.setAdapter(mAdapter); 
    dialog.setContentView(view); 

    return dialog; 
} 

И это мой CustomAdapter:

public class CustomListAdapterDialog extends BaseAdapter { 
    [....] 
    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder = null; 
    int type = getItemViewType(position); 

    //System.out.println("getView " + position + " " + convertView + " type = " + type); 


    if(convertView == null) { 
     //initialize the view Holder 
     viewHolder = new ViewHolder(); 
     switch (type) { 
      case TYPE_ITEM: 
       convertView = inflater.inflate(R.layout.dialog_row_layout, null); 

       viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.marker); 
       viewHolder.tvNomeChecked = (TextView) convertView.findViewById(R.id.nome_marker); 
       viewHolder.swCheck = (Switch) convertView.findViewById(R.id.checked_item); 


       break; 
      case TYPE_SEPARATOR: 
       convertView = inflater.inflate(R.layout.dialog_section_layout, null); 

       viewHolder.tvSeparator = (TextView) convertView.findViewById(R.id.section_alert_dialog); 
       break; 

     } 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final DialogModel model; 
    switch (type) { 
     case TYPE_ITEM: 
      model =(DialogModel) mData.get(position); 

      //viewHolder.ivIcon.setImageDrawable(model.getMarkerIcon()); 
      viewHolder.ivIcon.setBackgroundResource(model.getMarkerColor()); 
      viewHolder.tvNomeChecked.setText(model.getNomePercorso()); 
      if(model.isCkeck()) { 

       viewHolder.swCheck.setChecked(true); 
      } else { 
       viewHolder.swCheck.setChecked(false); 

      } 

      viewHolder.swCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        //HERE I WANT TO CALL THE mSelectedItem OF MY FilterDialogFragment 
       } 
      }); 
      break; 
     case TYPE_SEPARATOR: 
      model =(DialogModel) mData.get(position); 

      viewHolder.tvSeparator.setText(model.getNomeSection() ); 
      break; 

    } 
    return convertView; 
} 

private static class ViewHolder { 
    ImageView ivIcon; 
    TextView tvNomeChecked; 
    TextView tvSeparator; 
    Switch swCheck; 
} 
+0

создать экземпляр диалогового фрагмента, затем вы можете получить доступ к его общедоступной переменной с помощью своего экземпляра в любом месте приложения – Android

+0

Я уже создаю экземпляр фрагмента диалога. Мне нужно ссылаться на этот экземпляр, а не на новый, потому что некоторые операции над глобальной переменной –

ответ

0

Если существует прямая/косвенная связь между диалогом и фрагментом? Если да, то используйте интерфейс, чтобы передать свою переменную, если нет, чем вы можете использовать статическую переменную, но старайтесь избегать статической переменной/классов и меняйте свой код, чтобы избежать статического ключевого слова. Создайте интерфейс и реализуйте его в фрагменте диалога, чем передайте эту ссылку к вашему адаптеру и инициализировать его в вашем адаптере и использовать его

+0

- это фрагмент. Я хочу ссылаться на переменную, определенную в фрагменте диалога из класса адаптера –

+0

Поделитесь некоторым кодом, я не мог понять, чего вы хотите достичь, и, самое главное, почему? –

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