2016-03-14 2 views
2

Мне нужно называть намерение от onBindViewHolder адаптера recycler, при событии click от одного из видов в ViewHolder. Я не могу сделать это напрямую.Правильный способ вызова метода активности из адаптера recycler в Android?

public void onBindViewHolder(MyAdapter.MyViewHolder viewHolder, int i) { 
     viewHolder.button.setonClickListener(new View.onClickListener(
       @Override 
       onClick(View v) { 
       Intent i=new Intent(); 
       i.setAction("Intent.ACTION_CALL"); 
       i.setData(Uri.parse("tel:1234567890")); 
       startActivity(i); 
      } 
     )); 
} 

Это не помогло. Он продолжал бросать ошибку. Затем я создал публичный метод в Activity с тем же кодом. Контекст проходящей активности в конструкторе адаптера. Затем вызывается метод следующим образом из события нажатия кнопки.

((MyActivity)context).makePhoneCall("1234567890"); 

Это сделало трюк. Но я чувствую, что должен быть лучший способ сделать это. Как я в основном из C фона, я не уверен. Таким образом, мой вопрос заключается в том, что это лучший или более правильный способ, согласно соглашениям программирования Java.

+0

В основном 'startActivity()' метод является из 'деятельности 'класс. Таким образом, мы должны обращаться именно так. –

+0

@NigamPatro 'startActivity()' метод из класса Context. – fRoStBiT

+0

@fRoStBiT yup buddy, извините, его из класса Context и вы правы. –

ответ

1

Если вам нужно вызвать другую деятельность через Intent, вы можете использовать любой вид Context-х:

v.getContext().startActivity(i); 

Я думаю, что это правильный метод.

0

Попробуйте ваш адаптер:

Activity mContext; 

public FollowersAdapter(Activity mContext) { 
    this.mContext = mContext; 
} 

// А затем ваш щелчок в onBindViewHolder

holder.linear_user.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      System.out.println("linear click>>>>>>>>>>>>"); 

      Intent ToImage = new Intent(mContext, UserData.class); 
      ToImage.putExtra("user_id", data.get(position).getFollower_id()); 
      mContext.startActivity(ToImage); 

     } 
    }); 
+0

этот метод, который я использую в настоящее время. Я хотел знать, правильно ли это, или если есть более правильный способ реализовать это. – Deepak

+0

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

0

Другой способ заключается в реализации слушателя в recycleradapter и слушать его в своей деятельности.

Так в адаптере:

public class RecyclerAdapter .... {  

    private MyClickListener listener; 


    public void onBindViewHolder(MyAdapter.MyViewHolder viewHolder, int i) { 
     viewHolder.button.setonClickListener(new View.onClickListener(
       @Override 
       onClick(View v) { 
        listener.onClicked(true); 
      } 
     )); 

    public void setMyClickListener(MyClickListener listener) { 
     this.listener = listener; 
    } 

} 

// создать MyClickListener.class

public interface MyClickListener { 

       public void onClicked(boolean status); 
     } 

В вашей деятельности:

public class MainActivity ... implements MyClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


adapter.setMyClickListener(this); 

} 

@Override 
onClick(boolean status) { 
     if (status){ 
      Intent i=new Intent(); 
      i.setAction("Intent.ACTION_CALL"); 
      i.setData(Uri.parse("tel:1234567890")); 
      startActivity(i); 
     }; 
} 

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