2015-08-27 3 views
0

У меня есть проблема с одним нажатием кнопки Button в адаптере RecyclerView. Кнопка клика всегда больше, чтобы получить ответ. Но я хочу сделать один клик, а затем получить ответ ..кнопка с одним кликом в адаптере RecylerView?

это моя кнопка.

<Button 
     android:id="@+id/btn_action" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawableTop="@drawable/ic_add_white_24dp" 
     android:theme="@style/Button.Blue" /> 

и это мой адаптер

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> implements View.OnClickListener { 

    ............. 

    private OnNewsItemClickListener OnNewsItemClickListener; 

    public void setOnNewsItemClickListener(OnNewsItemClickListener onNewsItemClickListener) { 
     this.OnNewsItemClickListener = onNewsItemClickListener; 
    } 

    public interface OnNewsItemClickListener { 
     public void onActionClick(View v, int position); 

    } 

    public NewsAdapter(Activity activity, ArrayList<HashMap<String, String>> News, 
         ArrayList<HashMap<String, String[]>> newsArticleImages) { 
     this.activity = activity; 
     dataNews = News; 


    } 


    @Override 
    public void onClick(View v) { 

     final int viewId = v.getId(); 
     if (viewId == R.id.btn_action) { 
      if (OnNewsItemClickListener != null) { 
       OnNewsItemClickListener.onActionClick(v, (Integer) v.getTag()); 
      } 
     } 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 

     @Bind(R.id.btn_action) 
     Button btn_action; 

     public ViewHolder(View vi) { 
      super(vi); 
      ButterKnife.bind(this, vi); 

     } 

    } 

    @Override 
    public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.pin_item_news_recyclerview, parent, false); 
     ViewHolder holder = new ViewHolder(v); 
     holder.btn_action.setOnClickListener(this); 
     return holder; 
    } 

    public void onBindViewHolder(final ViewHolder holder, int position) { 



    } 
............. 
} 

это моя активность называть ClickListener

public class BusinessActivity extends AppCompatActivity implements OnRefreshListener, NewsAdapter.OnNewsItemClickListener { 


     @Bind(R.id.grid_view) RecyclerView list; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.business_home); 
      ButterKnife.bind(this); 

      adapter = new NewsAdapter(BusinessActivity.this, NewsList, 
        NewsArticleImagesList); 
      adapter.setOnNewsItemClickListener(this); 
      list.setHasFixedSize(true); 

      list.setAdapter(adapter); 

     } 



    @Override 
    public void onActionClick(View v, int position) { 

     HashMap<String, String> news = new HashMap<String, String>(); 
     news= adapter.dataNews.get(position); 
     String btn_des = news.get(Variabel.KEY_BTN_DES); 
     if(btn_des.equals("Add News")) { 
      Bundle b = new Bundle(); 
      Intent i; 
      i = new Intent(BusinessActivity.this, AddNewsActivity.class); 
      b.putString(Variabel.KEY_BUSINESS_NAME, business_name); 
      b.putString(Variabel.KEY_INFO_FULL, info_full); 
      b.putString(Variabel.KEY_SUB_INFO_FULL, sub_info_full); 
      b.putString(Variabel.KEY_ID_BUSINESS, _idBusiness); 
      i.putExtras(b); 
      startActivity(i); 
     } 
    } 
    } 

так, как это исправить?

ответ

0

Если он отвечает на события щелчка, я думаю, что он работает правильно. Это может быть просто время. Попробуйте нажать только один раз и подождать некоторое время. Если он отвечает, то его рабочий тон. И это может быть проблема с производительностью. Отправьте свой код, чтобы мы могли лучше понять, что на самом деле происходит.

Попробуйте использовать адаптер ниже и внесите в него любые изменения. Ваш класс «ViewHolder» должен реализовать View.OnClickListener не сам адаптер.

//package 
 

 
import android.app.Activity; 
 
import android.content.Context; 
 
import android.support.v7.widget.CardView; 
 
import android.support.v7.widget.RecyclerView; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.Button; 
 
import android.widget.ProgressBar; 
 
import android.widget.TextView; 
 

 
import java.util.ArrayList; 
 
import java.util.HashMap; 
 

 
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { 
 

 
    private ArrayList<HashMap<String, String>> dataNews; 
 
    private Context context; 
 

 
    public NewsAdapter(Activity activity, ArrayList<HashMap<String, String>> News, 
 
         ArrayList<HashMap<String, String[]>> newsArticleImages) { 
 
     this.context = activity; 
 
     dataNews = News; 
 
    } 
 

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

 
    @Override 
 
    public void onBindViewHolder(ViewHolder holder, int position) { 
 
//  holder.btn_action.setText("Action"); 
 
    } 
 

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

 
    @Override 
 
    public int getItemViewType(int position) { 
 
     return 0; 
 
    } 
 

 
    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
 
     int Holderid; 
 

 
     private OnNewsItemClickListener OnNewsItemClickListener; 
 
     Button btn_action;; 
 
     Context contxt; 
 

 

 
     public ViewHolder(View itemView, int ViewType, Context c) { 
 
      super(itemView); 
 
      contxt = c; 
 
      itemView.setClickable(true); 
 
      itemView.setOnClickListener(this); 
 

 
      btn_action = (Button) itemView.findViewById(R.id.btnDeleteGoalRecyclerItemActGoalList); 
 

 
      btn_action.setOnClickListener(this); 
 
     } 
 

 
     @Override 
 
     public void onClick(View v) { 
 
      try { 
 
       OnNewsItemClickListener = (OnNewsItemClickListener) contxt; 
 
      } catch (ClassCastException e) { 
 
       throw new ClassCastException(contxt.toString() 
 
         + " must implement OnNewsItemClickListener"); 
 
      } 
 
      final int viewId = v.getId(); 
 
      if (viewId == R.id.btn_action) { 
 
       if (OnNewsItemClickListener != null) { 
 
        OnNewsItemClickListener.onActionClick(v, (Integer) v.getTag()); 
 
       } 
 
      } 
 
     } 
 
    } 
 

 
    public interface OnNewsItemClickListener { 
 
     public void onActionClick(View v, int position); 
 
    } 
 
}

+0

проверить мой вопрос обновления –

+0

где я должен поставить 'публичный недействительным setOnNewsItemClickListener (OnNewsItemClickListener onNewsItemClickListener) { this.OnNewsItemClickListener = onNewsItemClickListener; } 'в адаптере и как вызвать в Activity sir, я получаю ошибку в строке' adapter.setOnNewsItemClickListener (this); '? –

+0

Я считаю, что нет необходимости ставить эти строки, попробуйте удалить их, поскольку мы установили onClickListener на кнопку в классе ViewHolder –