2017-12-07 20 views
0

ArrayAdapterにViewオブジェクトを渡して、スナックバーを開こうとしています。 私はそれにビューを渡す必要がありますが、ClickListenersが機能しない前に最終的なビューを取る。snackbarの配列アダプター内にビューを渡す

は、どのように私はパラメータを渡すために別のOnMenuItemClickListenerを作成しないようにしたいPopupMenu.OnMenuItemClickListenerとDialogInterface.OnClickListener

過去のビュー変数を取得することができます。

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 
case R.id.exercise_options_area: 

try {//setting texts for custom listView 


      deleteArea.setOnClickListener(new View.OnClickListener() {//set to the linear layout 

       @Override 
       public void onClick(View v) { 
final PopupMenu popup = new PopupMenu(parent.getContext(), v); 
popup.getMenu().add(0, 0, 0, menuIconWithText(parent.getResources().getDrawable(R.drawable.ic_rename), "Rename")); 
//if i try using v in snackbar in this line it works, but I don't want it here, I want it down there. using final view = v does not work 

popup.show(); 
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

    @Override 
    public boolean onMenuItemClick(MenuItem item) { 

     exerciseName = getItem(position);//no spaces, the exerciseName before rename 
     switch (item.getOrder()) { 
      case 0:///////////////////////RENAME 

       AlertDialog.Builder alertBuilder = new AlertDialog.Builder(parent.getContext()); 
       View viewInput = (LayoutInflater.from(parent.getContext())).inflate(R.layout.user_input, null); 
       final EditText inputExerciseName = viewInput.findViewById(R.id.userInput); 

       alertBuilder.setView(viewInput);//show viewInput which is the editText prompt (user_input.xml) 

       alertBuilder.setCancelable(true) 
         .setTitle("Enter New Exercise Name") 
         .setPositiveButton("Save", new DialogInterface.OnClickListener() { 


          @Override 
          public void onClick(DialogInterface dialog, int which) {//on clicking save 
           if (!mainList.contains(inputExerciseName.getText().toString())) { 
            String renamed = inputExerciseName.getText().toString(); 
            renameItem(position, renamed);//rename in the list 



            if (sp.contains(mostRecent + workoutName + " " + exerciseName + " sets")){//only copy if data exists 
             copySharedPreferencesRename(renamed, workoutName, exerciseName,sp,editor);//rename by copying data to new name 
            } 

            checkSharedPreferencesDeleteExercise(workoutName, exerciseName,sp,editor);//delete the data in old name 
            editor.apply();//apply must be done here since this action is separate 
            //refreshListView();//refresh view 



            ((ExerciseList)mContext).recreate();//refresh activity. for past date it refreshes to current 
            if (visitState.equals("pastDate")){ 


            } 
            else 
            *{ 
             simpleSnackBar("Renamed", "#424242", "#FFFFFF", **NEED VIEW HERE**, Snackbar.LENGTH_LONG);//800 grey, white 
             //debug passes this point, but snackbar does not show with final view v 
            }* 
           } 
           else{ 

            return;//make user enter again 
           } 
          } 
         }) 
         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {//on clicking cancel 
          public void onClick(DialogInterface dialog, int which) { 
           InputMethodManager imm = (InputMethodManager) parent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);//remove keyboard 
           imm.hideSoftInputFromWindow(inputExerciseName.getWindowToken(), 0); 
           dialog.dismiss(); 
          } 
         }); 

       AlertDialog dialog = alertBuilder.create(); 
       dialog.show(); 
       dialog.setCanceledOnTouchOutside(false); 
       dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

       break; 

答えて

0

あなたはそれがそのコンストラクタで作成していますとき、あなたArrayAdapterにごFragmentまたはルートあなたActivityViewGrouprootViewを渡す必要があります。

このビューをArrayAdapterのフィールドとして保持し、SnackBarを表示するために使用します。

SnackBarは、アダプタのgetView()メソッドの結果ではないと仮定しています。

+0

ありがとうございます。私はこれに数時間を費やしていましたが、前にあなたの方法を試してみましたが、もう一度試してみましたが、今度はsnackbarを表示できないactivity.recreateの問題でした。アクティビティが更新されたときにスナックバーを表示する方法を知っていますか? –

+0

リフレッシュとはどういう意味ですか?チャットを開始しても構いません – elmorabea

関連する問題