2017-04-24 66 views
0

我有這兩個適配器OperateClassroomAdapter和EditClassRoom適配器如何在適配器之間傳輸數據?

public class OperateClassroomsAdapter extends  RecyclerView.Adapter<OperateClassroomsAdapter.ViewHolder> { 
private ArrayList<Classroom> classroomList; 

private AdapterClickListener adapterClickListener; 

public OperateClassroomsAdapter(ArrayList<Classroom> classroomList) { 
    this.classroomList = classroomList; 
} 

/** 
* Set on item click listener 
* @param adapterClickListener AdapterClickListener 
*/ 
public void setAdapterClickListener(AdapterClickListener adapterClickListener) { 
    this.adapterClickListener = adapterClickListener; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.operate_classroom_item, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(ViewHolder viewHolder, final int position) { 
    Classroom item = classroomList.get(position); 
    viewHolder.text.setText(item.getName()); 
    viewHolder.counter.setText(String.valueOf(item.getStudentNumber())); 
    Log.d("sn",String.valueOf(item.getStudentNumber())); 
} 

@Override 
public int getItemCount() 
{ 
    return classroomList == null ? 0 : classroomList.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    TextView text; 
    TextView counter; 

    public ViewHolder(View itemView) 
    { 
     super(itemView); 
     itemView.setOnClickListener(this); 
     text = (TextView) itemView.findViewById(R.id.text); 
     counter = (TextView) itemView.findViewById(R.id.counter); 
    } 

    @Override 
    public void onClick(View v) 
    { 
     if (adapterClickListener != null) { 
      adapterClickListener.OnItemClick(getAdapterPosition()); 
     } 
    } 
} 
    } 

在這裏,在onBindViewHolder Log.d( 「SN」)它顯示,而在下面的代碼正確值

public class EditClassroomsAdapter extends RecyclerView.Adapter<EditClassroomsAdapter.ViewHolder> { 
    private Context context; 
    private ArrayList<Classroom> classroomList; 
    private ListPopupWindow listPopupWindow; 

    private PopupClickListener popupClickListener; 
    private AdapterClickListener adapterClickListener; 
    private DeleteClassBtnClickListener deleteClassBtnClickListener; 
    private EditClassBtnClickListener editClassBtnClickListener; 

    private Random mRandom = new Random(); 
    String colorarray[]= new String[]{ 
      "#ffff66", 
      "#99ff66", 
      "#ffffff", 
      "#b3ffff", 
      "#ff8080", 
      "#ccdcff", 
      "#c3c3c3" 
    }; 
    public EditClassroomsAdapter(Context context, ArrayList<Classroom> classroomList) { 
     this.context = context; 
     this.classroomList = classroomList; 
     listPopupWindow = new ListPopupWindow(context); 
    } 

    /** 
    * Set on item click listener 
    * @param adapterClickListener AdapterClickListener 
    */ 
    public void setAdapterClickListener(AdapterClickListener adapterClickListener) { 
     this.adapterClickListener = adapterClickListener; 
    } 

    /** 
    * Set on pop-up men item click listener 
    * @param popupClickListener PopupClickListener 
    */ 
    public void setPopupClickListener(PopupClickListener popupClickListener) { 
     this.popupClickListener = popupClickListener; 
    } 

    public void setDeleteClassBtnClickListener(DeleteClassBtnClickListener deleteClassBtnClickListener){ 
     this.deleteClassBtnClickListener=deleteClassBtnClickListener; 
    } 

    public void setEditClassBtnClickListener(EditClassBtnClickListener editClassBtnClickListener) { 
     this.editClassBtnClickListener = editClassBtnClickListener; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.edit_classroom_item, parent, false); 

     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder viewHolder, final int position) { 
     Classroom item = classroomList.get(position); 
     Log.d("sn22",String.valueOf(item.getStudentNumber())); 

     viewHolder.text.setText(item.getName()); 
     viewHolder.student_count.setText(String.valueOf(item.getStudentNumber())); 
     viewHolder.settings.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (listPopupWindow != null) { 
        setListPopUpWindow(v, position); 
       } 
      } 
     }); 
     /* 
     New Delete button added 
     */ 
     viewHolder.del_class.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(deleteClassBtnClickListener!=null) 
        deleteClassBtnClickListener.OnDeleteclassBtnClicked(position); 
      } 
     }); 
     /* 
      edit_class button added 
     */ 
     viewHolder.edit_class.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(editClassBtnClickListener!=null) 
        editClassBtnClickListener.OnEditclassBtnClicked(position); 
      } 
     }); 
     Random rand=new Random(); 
     int rgen=rand.nextInt(6)+1; 
     viewHolder.thumbnail.getLayoutParams().height = getRandomIntInRange(350,200); 
     viewHolder.thumbnail.setBackgroundColor(Color.parseColor(colorarray[rgen])); 
     Glide.with(context).load(item.getThumbnail()).into(viewHolder.thumbnail); 

     // loading album cover using Glide library 
     // Glide.with(mContext).load(album.getThumbnail()).into(holder.thumbnail); 
    } 

    protected int getRandomIntInRange(int max, int min){ 
     return mRandom.nextInt((max-min)+min)+min; 
    } 

    @Override 
    public int getItemCount() { 
     return classroomList == null ? 0 : classroomList.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     TextView text; 
     ImageButton settings; 
     ImageView thumbnail; 
     ImageButton del_class,edit_class; 
     TextView student_count; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this); 
      thumbnail=(ImageView) itemView.findViewById(R.id.cat_image) ; 
      text = (TextView) itemView.findViewById(R.id.text); 
      student_count = (TextView) itemView.findViewById(R.id.student_count); 
      settings = (ImageButton) itemView.findViewById(R.id.settings); 
      del_class=(ImageButton)itemView.findViewById(R.id.del_class); 
      edit_class=(ImageButton)itemView.findViewById(R.id.edit_class); 
     } 

     @Override 
     public void onClick(View v) { 
      if (adapterClickListener != null) { 
       adapterClickListener.OnItemClick(getAdapterPosition()); 
      } 
     } 
    } 

    /** 
    * List pop up menu window 
    * @param anchor View 
    * @param classroomPosition List item's position 
    */ 
    private void setListPopUpWindow(View anchor, final int classroomPosition) { 
     listPopupWindow.dismiss(); 

     listPopupWindow.setAdapter(new ArrayAdapter(context, android.R.layout.simple_list_item_1, 
       context.getResources().getStringArray(R.array.edit_classroom))); 
     listPopupWindow.setAnchorView(anchor); 
     listPopupWindow.setContentWidth(context.getResources() 
       .getInteger(R.integer.list_pop_up_width)); 
     listPopupWindow.setDropDownGravity(Gravity.END); 
     listPopupWindow.setModal(true); 
     listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int menuItemPosition, long id) { 
       if (popupClickListener != null) { 
        popupClickListener.OnPopupClick(classroomPosition, menuItemPosition); 
       } 

       listPopupWindow.dismiss(); 
      } 
     }); 
     listPopupWindow.show(); 
    } 

} 

的Log.d( 「sn22」)顯示值爲0.爲什麼會發生這種情況?或者,我如何從OperateClassroomAdapter獲取值?

我主要是通過IM相同ArrayList中,仍然SN22節目0和其他示出了適當的values.Also這些是2個不同的片段。 這裏是他們各自的類在哪裏theyre使用的代碼。

public class EditClassroomFragment extends Fragment { 

private Context context; 
private static int p=0; 
private SwipeRefreshLayout swipeRefreshLayout; 
private RecyclerView list; 
private ArrayList<Classroom> arrayList = new ArrayList<>(); 
private EditClassroomsAdapter adapter; 
private RecyclerView.LayoutManager mLayoutManager2 = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
private TextView emptyText; //empty list view text 

public EditClassroomFragment() {} 

public static EditClassroomFragment newInstance() { 
    EditClassroomFragment editClassroomFragment = new EditClassroomFragment(); 
    return editClassroomFragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // retain this fragment 
    setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
         @Nullable Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.refreshable_list, container, false); 

    context = rootView.getContext(); 
    list = (RecyclerView) rootView.findViewById(R.id.list); 
    adapter = new EditClassroomsAdapter(context, arrayList); 
    list.setAdapter(adapter); 

    list.setLayoutManager(mLayoutManager2); 
    list.setHasFixedSize(true); 

    emptyText = (TextView) rootView.findViewById(R.id.emptyText); 
    swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeRefreshLayout); 
    swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, 
      android.R.color.holo_green_light, 
      android.R.color.holo_orange_light, 
      android.R.color.holo_red_light); 
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      new SelectClassrooms().execute(); 
     } 
    }); 
    addDeleteClassBtnClickListener(); 
    addAdapterClickListener(); 
    addPopupClickListener(); 
    addEditClassBtnClickListener(); 

    new SelectClassrooms().execute(); 


    return rootView; 
} 

/** 
* Set empty list text 
*/ 
private void setEmptyText() { 
    if (emptyText != null) { 
     if (arrayList.isEmpty()) { 
      emptyText.setVisibility(View.VISIBLE); 
     } else { 
      emptyText.setVisibility(View.GONE); 
     } 
    } 
} 

/** 
* Check if the given classroom name already exists 
* @param classroomName Selected classroom 
* @return 
*/ 
private boolean isAlreadyExist(String classroomName) { 
    boolean isAlreadyExist = false; 

    for (Classroom classroom : arrayList) { 
     if (classroom.getName().equals(classroomName)) { 
      isAlreadyExist = true; 
      break; 
     } 
    } 

    return isAlreadyExist; 
} 

/** 
* Add new class item 
*/ 
public void addClassroom() { 
    final PromptDialog promptDialog = new PromptDialog(context); 
    promptDialog.setPositiveButton(getString(R.string.ok)); 
    promptDialog.setAllCaps(); 
    promptDialog.setAlphanumeric(); 
    promptDialog.setOnPositiveClickListener(new PromptListener() { 
     @Override 
     public void OnPrompt(String promptText) { 
      closeKeyboard(); 

      promptDialog.dismiss(); 

      if (!TextUtils.isEmpty(promptText)) { 
       if (!isAlreadyExist(promptText)) { 
        new InsertClassroom().execute(promptText); 
       } else { 
        //alert 
        CustomAlertDialog customAlertDialog = new CustomAlertDialog(context); 
        customAlertDialog.setMessage(getString(R.string.couldNotInsertClassroom)); 
        customAlertDialog.setPositiveButtonText(getString(R.string.ok)); 
        customAlertDialog.showDialog(); 
       } 
      } 
     } 
    }); 
    promptDialog.show(); 
} 

public void addClassroom2(String st) { 
    if(st.equals(null)==false) { 
     if (!isAlreadyExist(st)) { 
      new InsertClassroom().execute(st); 
     } else { 
      //alert 
      CustomAlertDialog customAlertDialog = new CustomAlertDialog(context); 
      customAlertDialog.setMessage(getString(R.string.couldNotInsertClassroom)); 
      customAlertDialog.setPositiveButtonText(getString(R.string.ok)); 
      customAlertDialog.showDialog(); 
     } 
    } 
} 

/** 
* Change the selected class name 
* @param classroomId current classroom to be changed 
* @param content current name of the classroom 
*/ 
public void editClassroom(final int classroomId, String content) { 
    final PromptDialog promptDialog = new PromptDialog(context); 
    promptDialog.setContent(content); 
    promptDialog.setPositiveButton(getString(R.string.ok)); 
    promptDialog.setAllCaps(); 
    promptDialog.setAlphanumeric(); 
    promptDialog.setOnPositiveClickListener(new PromptListener() { 
     @Override 
     public void OnPrompt(String promptText) { 
      closeKeyboard(); 

      promptDialog.dismiss(); 

      if (!TextUtils.isEmpty(promptText)) { 
       new UpdateClassroom().execute(String.valueOf(classroomId), promptText); 
      } 
     } 
    }); 
    promptDialog.show(); 
} 

/** 
* Delete classroom 
* @param classroom Selected classroom 
*/ 
private void deleteClassroom(final Classroom classroom) { 
    //show alert before deleting 
    CustomAlertDialog customAlertDialog = new CustomAlertDialog(context); 
    customAlertDialog.setMessage(classroom.getName() 
      + getString(R.string.sureToDelete)); 
    customAlertDialog.setPositiveButtonText(getString(R.string.delete)); 
    customAlertDialog.setNegativeButtonText(getString(R.string.cancel)); 
    customAlertDialog.setOnClickListener(new OnAlertClick() { 
     @Override 
     public void OnPositive() { 
      new DeleteClassroom().execute(classroom.getId()); 
     } 

     @Override 
     public void OnNegative() { 
      //do nothing 
     } 
    }); 
    customAlertDialog.showDialog(); 
} 

/** 
* Go inside classroom to add, change or delete students 
* @param classroom 
*/ 
private void showStudents(Classroom classroom) { 
    Intent intent = new Intent(context, EditStudentActivity.class); 
    intent.putExtra("classroom", classroom); 
    startActivity(intent); 
    getActivity().overridePendingTransition(R.anim.move_in_from_bottom, 
      R.anim.stand_still); 
} 

/** 
* List item click event 
*/ 
private void addAdapterClickListener() { 
    adapter.setAdapterClickListener(new AdapterClickListener() { 
     @Override 
     public void OnItemClick(int position) { 
      if (arrayList != null && arrayList.size() > position) { 
       showStudents(arrayList.get(position)); 
       Log.d("sn44",String.valueOf(arrayList.get(position).getStudentNumber())); 
      } 
     } 
    }); 
} 

/** 
* Pop-up menu item click event 
*/ 
public void addPopupClickListener() { 
    adapter.setPopupClickListener(new PopupClickListener() { 
     @Override 
     public void OnPopupClick(int itemPosition, int menuPosition) { 
      if (arrayList != null && arrayList.size() > itemPosition) { 
       Classroom classroom = arrayList.get(itemPosition); 

       if (menuPosition == ClassroomPopup.CHANGE_NAME.getValue()) { 
        editClassroom(classroom.getId(), classroom.getName()); 
       } else if (menuPosition == ClassroomPopup.DELETE_CLASSROOM.getValue()) { 
        deleteClassroom(classroom); 
       } 
      } 
     } 
    }); 
} 

/* 
    Edit button and delete button listeners 
*/ 

public void addDeleteClassBtnClickListener() 
{ 
    adapter.setDeleteClassBtnClickListener(new DeleteClassBtnClickListener() { 
     @Override 
     public void OnDeleteclassBtnClicked(int position) { 
      if (arrayList != null && arrayList.size() > position) { 
       Classroom classroom = arrayList.get(position); 
       deleteClassroom(classroom); 
      } 
     } 
    }); 
} 

public void addEditClassBtnClickListener() 
{ 
    adapter.setEditClassBtnClickListener(new EditClassBtnClickListener() { 
     @Override 
     public void OnEditclassBtnClicked(int position) { 
      if (arrayList != null && arrayList.size() > position) { 
       Classroom classroom = arrayList.get(position); 
       editClassroom(classroom.getId(), classroom.getName()); 
      } 
     } 
    }); 
} 

/** 
* Select classrooms from DB 
*/ 
private class SelectClassrooms extends AsyncTask<Void, Void, ArrayList<Classroom>> { 

    @Override 
    protected void onPreExecute() { 
     swipeRefreshLayout.setRefreshing(true); 
    } 

    @Override 
    protected ArrayList<Classroom> doInBackground(Void... params) { 
     DatabaseManager databaseManager = new DatabaseManager(context); 
     ArrayList<Classroom> tmpList = databaseManager.selectClassrooms(); 

     return tmpList; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Classroom> tmpList) { 
     swipeRefreshLayout.setRefreshing(false); 

     arrayList.clear(); 

     if (tmpList != null) { 
      arrayList.addAll(tmpList); 
      adapter.notifyDataSetChanged(); 

      setEmptyText(); 
     } 
    } 
} 

/** 
* Insert classroom name into DB 
*/ 
private class InsertClassroom extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     String classroom = params[0]; 
     DatabaseManager databaseManager = new DatabaseManager(context); 
     boolean isSuccessful = databaseManager.insertClassroom(classroom); 

     return isSuccessful; 
    } 

    @Override 
    protected void onPostExecute(Boolean isSuccessful) { 
     if (isSuccessful) { 
      new SelectClassrooms().execute(); 
     } 
    } 
} 

/** 
* Update classroom name in the DB 
*/ 
private class UpdateClassroom extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     String classroomId = params[0]; 
     String newName = params[1]; 
     DatabaseManager databaseManager = new DatabaseManager(context); 
     boolean isSuccessful = databaseManager.updateClassroomName(classroomId, newName); 

     return isSuccessful; 
    } 

    @Override 
    protected void onPostExecute(Boolean isSuccessful) { 
     if (isSuccessful) { 
      new SelectClassrooms().execute(); 
     } 
    } 
} 

/** 
* Delete a classroom item from DB 
*/ 
private class DeleteClassroom extends AsyncTask<Integer, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(Integer... params) { 
     int classroomId = params[0]; 
     DatabaseManager databaseManager = new DatabaseManager(context); 
     boolean isSuccessful = databaseManager.deleteClassroom(classroomId); 

     return isSuccessful; 
    } 

    @Override 
    protected void onPostExecute(Boolean isSuccessful) { 
     if (isSuccessful) { 
      new SelectClassrooms().execute(); 
     } 
    } 
} 

/** 
* Closes keyboard for disabling interruption 
*/ 
private void closeKeyboard(){ 
    try { 
     InputMethodManager imm = (InputMethodManager) 
       getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 
       InputMethodManager.HIDE_NOT_ALWAYS); 
    } catch (Exception ignored) {} 
} 
} 

public class AttendancesFragment extends Fragment { 

private Context context; 

private SwipeRefreshLayout swipeRefreshLayout; 
private RecyclerView list; 
private ArrayList<Classroom> arrayList = new ArrayList<>(); 
private OperateClassroomsAdapter adapter; 

private TextView emptyText; //empty list view text 


public AttendancesFragment() {} 

public static AttendancesFragment newInstance() { 
    AttendancesFragment attendancesFragment = new AttendancesFragment(); 
    return attendancesFragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // retain this fragment 
    setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
         @Nullable Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.refreshable_list, container, false); 

    context = rootView.getContext(); 

    list = (RecyclerView) rootView.findViewById(R.id.list); 
    adapter = new OperateClassroomsAdapter(arrayList); 
    list.setAdapter(adapter); 
    list.setLayoutManager(new LinearLayoutManager(context)); 
    list.setHasFixedSize(true); 

    emptyText = (TextView) rootView.findViewById(R.id.emptyText); 

    swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeRefreshLayout); 
    swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, 
      android.R.color.holo_green_light, 
      android.R.color.holo_orange_light, 
      android.R.color.holo_red_light); 
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      new SelectClassrooms().execute(); 
     } 
    }); 

    addAdapterClickListener(); 

    new SelectClassrooms().execute(); 


    return rootView; 
} 

/** 
* Set empty list text 
*/ 
private void setEmptyText() { 
    if (emptyText != null) { 
     if (arrayList.isEmpty()) { 
      emptyText.setVisibility(View.VISIBLE); 
     } else { 
      emptyText.setVisibility(View.GONE); 
     } 
    } 
} 

/** 
* List item click event 
*/ 
public void addAdapterClickListener() { 
    adapter.setAdapterClickListener(new AdapterClickListener() { 
     @Override 
     public void OnItemClick(int position) { 
      if (arrayList != null && arrayList.size() > position) { 
       Intent intent = new Intent(context, TakeAttendanceActivity.class); 
       intent.putExtra("classroom", arrayList.get(position)); 
       startActivityForResult(intent, 0); 
       getActivity().overridePendingTransition(R.anim.move_in_from_bottom, 
         R.anim.stand_still); 
      } 
     } 
    }); 
} 

/** 
* Select classrooms from DB 
*/ 
private class SelectClassrooms extends AsyncTask<Void, Void, ArrayList<Classroom>> { 

    @Override 
    protected void onPreExecute() { 
     swipeRefreshLayout.setRefreshing(true); 
    } 

    @Override 
    protected ArrayList<Classroom> doInBackground(Void... params) { 
     DatabaseManager databaseManager = new DatabaseManager(context); 
     ArrayList<Classroom> tmpList = databaseManager.selectClassroomsWithStudentNumber(); 

     return tmpList; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Classroom> tmpList) { 
     swipeRefreshLayout.setRefreshing(false); 

     arrayList.clear(); 

     if (tmpList != null) { 
      arrayList.addAll(tmpList); 
      adapter.notifyDataSetChanged(); 

      setEmptyText(); 
     } 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 
     Snackbar.make(list, getString(R.string.saved), Snackbar.LENGTH_LONG).show(); 
    } 
} 
} 
+0

你是否將相同的ArryList傳遞給適配器或在任何時候進行更改? –

+0

@ user2351509在提問時提及您的要求的所有細節。你是否在相同的活動或片段中調用適配器? – pk4393

+0

發佈您的活動代碼。你從哪裏構建教室列表? – FAT

回答

0

如果你的問題是如何從數據從適配器傳遞到另一個,你可以使用SharedPreferences保存和獲取來自適配器的數據到另一個。

希望這對你有所幫助

+0

由於沒有人回答着,我需要使用我們的method.Can告訴你怎麼寫Sharedprefrences我OperateClassroomAdapter和讀取Sharedprefrences在EditClassroomAdapter。 – user2351509

+0

這裏http://stackoverflow.com/questions/23024831/android-shared-preferences-example有一個有用的例子。如果你不明白,我會嘗試用很多細節解釋你;) – soissy

+0

非常感謝,你救了我:),但我認爲有可能是一個妥善的解決辦法,這不是正確的一個。 – user2351509