2016-11-21 2 views
0

Я хочу создать всплывающее окно, подобное этому при нажатии на 3 точки, открывается два варианта редактирования и удаления. Но я сталкиваюсь с проблемами в попытке установить это. Когда я нажимаю 3 точки, всплывающее окно появляется внизу. хотя он должен появиться рядом с тремя точками.Включить параметры меню на android

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
      <item 
      android:id="@+id/edit_post" 
      android:orderInCategory="100" 
      android:title="Edit"/> 
      <item 
      android:id="@+id/Delete_post" 
      android:orderInCategory="100" 
      app:showAsAction="never" 
      android:title="Delete"/> 
    </menu> 

Java код: Код

private Button options = (Button) view.findViewById(R.id.OptionsButton); 
     options.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       PopupMenu popup = new PopupMenu(activity, options); 
       popup.getMenuInflater().inflate(R.menu.options_popup, popup.getMenu()); 
       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem item) { 
         int id = item.getItemId(); 
         if (id == R.id.edit_post) { 

          //editpost here 


         } else if (id == R.id.Delete_post) { 
          Toast.makeText(activity, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); 

          //delete post here 
         } 

         return true; 
        } 
       }); 

       popup.show();//showing popup menu 
      } 
     }); //closing the setOnClickListener method 

адаптер:

public class profileadapter extends  RecyclerView.Adapter<profileadapter.MyViewHolder> { 
    private List<ProfileModel> profileModelList; 
    private ProfileModel profileModel; 
    private Activity activity; 
    private Button options; 
    public profileadapter(Activity activity, List<ProfileModel> profileModelList) { 
    this.activity = activity; 
    this.profileModelList = profileModelList; 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView users_name, users_post_title, home_location, home_date, /*complaint_status, */ 
      home_like_textview, 
      home_comment_textview, home_share_textview; 
    public ImageView complaint_posted; 

    public MyViewHolder(View view) { 
     super(view); 
     users_name = (TextView) view.findViewById(R.id.users_name); 
     users_post_title = (TextView) view.findViewById(R.id.users_post_title); 
     home_location = (TextView) (view).findViewById(R.id.home_location); 
     home_date = (TextView) (view).findViewById(R.id.home_date); 
     home_like_textview = (TextView) (view).findViewById(R.id.home_like_textview); 
     home_comment_textview = (TextView) (view).findViewById(R.id.home_comment_textview); 
     home_share_textview = (TextView) (view).findViewById(R.id.home_share_textview); 
     complaint_posted = (ImageView) (view).findViewById(R.id.complaint_posted); 
     options = (Button) view.findViewById(R.id.OptionsButton); 
     options.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       PopupMenu popup = new PopupMenu(activity, options); 
       popup.getMenuInflater().inflate(R.menu.options_popup, popup.getMenu()); 
       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem item) { 
         int id = item.getItemId(); 
         if (id == R.id.edit_post) { 
          //editpost here 
         } else if (id == R.id.Delete_post) { 
          Toast.makeText(activity, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); 
          //delete post here 
         } 
         return true; 
        } 
       }); 
       popup.show();//showing popup menu 
      } 
     }); //closing the setOnClickListener method 
     complaint_posted.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(activity, DetailPost.class); 
       activity.startActivity(intent); 
      } 
     }); 
    } 
} 

@Override 
public profileadapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(activity) 
      .inflate(R.layout.profile_cardview, parent, false); 
    return new profileadapter.MyViewHolder(itemView); 
} 
@Override 
public void onBindViewHolder(profileadapter.MyViewHolder holder, int position) { 
    ProfileModel post = (profileModelList.get(position)); 
    holder.users_name.setText(post.getUsers_email()); 
    holder.users_post_title.setText(post.getPost_title()); 
    holder.home_location.setText(post.getLocation()); 
    holder.home_date.setText(String.valueOf(post.getPost_date())); 
    // Log.i("Date", post.getPost_date()); 
    // holder.complaint_status.setText(post.getPost_status()); 
    holder.home_like_textview.setText(String.valueOf(post.getPost_like())); 
    holder.home_comment_textview.setText(String.valueOf(post.getPost_comment())); 
    holder.home_share_textview.setText(String.valueOf(post.getPost_share())); 
    Log.i("position", String.valueOf(position)); 
    holder.complaint_posted.setImageResource(post.getComplaint_posted()); 
    // holder.home_users_image.setImageResource(post.getUsers_profile()); 
} 

@Override 
public int getItemCount() { 
    return profileModelList.size(); 
} 
} 

макет для всплывающих опций:

Image

+0

Похоже, он появляется рядом с тремя точками в нижней части изображения ... Показать код Java, пожалуйста –

+0

@ cricket_007 отредактирован , Посмотрите на код Java. – Sara

+0

Больше кода, пожалуйста. Кажется, вы используете адаптер CardView и список. Ваш код показывает меню, конечно, но какие кнопки меню настроек вы подключили слушателей кликов? –

ответ

0

Ваш вопрос в том, что вы перезаписать каждый предыдущий, сохраняя кнопку параметров в классе адаптера. Таким образом всплывающее окно появляется только на последнем.

Вместо магазина Button options; в MyViewHolder

holder.options.setOnClickListener должен быть в onBindViewHolder

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