Android 如何处理RecycleServiceWholder中的点击
我是android新手,下面是我的Android 如何处理RecycleServiceWholder中的点击,android,android-recyclerview,Android,Android Recyclerview,我是android新手,下面是我的RecyclerAdapter类,它扩展了RecyclerView。我试图在我的RecycleServiceWholder中设置onClicklistener,但我未能调用新的活动,因为我似乎不知道如何从适配器获取上下文引用。任何帮助都将不胜感激 public class TabFragmentNews extends Fragment { private static final String ARG_EXAMPLE = "this_is_a_constant
RecyclerAdapter
类,它扩展了RecyclerView
。我试图在我的RecycleServiceWholder
中设置onClicklistener
,但我未能调用新的活动,因为我似乎不知道如何从适配器获取上下文引用。任何帮助都将不胜感激
public class TabFragmentNews extends Fragment {
private static final String ARG_EXAMPLE = "this_is_a_constant";
private String example_data;
private RecyclerView recyclerView;
ProgressBar progressBar;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);
progressBar = (ProgressBar) view.findViewById(R.id.progressBarNews);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_news);
//Executing The Async Task Class Here
newsupdate();
return view;
}
//Method For Executing The Async Task
public void newsupdate() {
new BackgroundTask(getActivity()).execute();
}
//Checking for internet/network connection here
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
example_data = getArguments().getString(ARG_EXAMPLE);
Log.i("Fragment created with ", example_data);
}
public static TabFragmentNews newInstance(String example_argmument) {
TabFragmentNews tabFragmentNews = new TabFragmentNews();
Bundle args = new Bundle();
args.putString(ARG_EXAMPLE, example_argmument);
tabFragmentNews.setArguments(args);
return tabFragmentNews;
}
//AsynTask Class for Downloading News Information
class BackgroundTask extends AsyncTask<Void, News, Void> {
Context ctx;
Activity activity;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
ProgressDialog progressDialog;
ArrayList<News> arrayList = new ArrayList<>();
public BackgroundTask(Context ctx) {
this.ctx = ctx;
activity = (Activity) ctx;
}
String json_string = "http://doubleclickug.com/app/newtest.php";
@Override
protected void onPreExecute() {
layoutManager = new LinearLayoutManager(ctx);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
adapter = new RecyclerAdapter(getContext(),arrayList);
recyclerView.setAdapter(adapter);
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
try {
URL url = new URL(json_string);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
httpURLConnection.disconnect();
String json_string = stringBuilder.toString().trim();
JSONObject jsonObject = new JSONObject(json_string);
JSONArray jsonArray = jsonObject.getJSONArray("server_response");
int count = 0;
while (count < jsonArray.length()) {
JSONObject JO = jsonArray.getJSONObject(count);
count++;
News news = new News(JO.getString("details"));
publishProgress(news);
//Thread.sleep(100);
}
Log.d("JSON STRING", json_string);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
//} catch (InterruptedException e) {
// e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(News... values) {
arrayList.add(values[0]);
adapter.notifyDataSetChanged();
}
@Override
protected void onPostExecute(Void aVoid) {
//progressDialog.dismiss();
progressBar.setVisibility(View.GONE);
}
}
//RecyclerAdapter Class for populating recycler view with Information
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
ArrayList<News> arrayList = new ArrayList<>();
public static final int TYPE_HEAD = 0;
public static final int TYPE_LIST = 1;
Context context;
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
this.arrayList = arrayList;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEAD) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_header, parent, false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
return recyclerViewHolder;
} else if (viewType == TYPE_LIST) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_row_layout, parent, false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
return recyclerViewHolder;
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
if (holder.viewType == TYPE_LIST) {
final News news = arrayList.get(position - 1);
holder.Details.setText(news.getDetails());
}
}
@Override
public int getItemCount() {
return arrayList.size() + 1;
}
//RecyclerView Holder Class
class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView Details;
int viewType;
public RecyclerViewHolder(View view, int viewType) {
super(view);
view.setOnClickListener(this);
if (viewType == TYPE_LIST) {
Details = (TextView) itemView.findViewById(R.id.team);
this.viewType = TYPE_LIST;
} else if (viewType == TYPE_HEAD) {
this.viewType = TYPE_HEAD;
}
}
//handling Clicks of news elements here
@Override
public void onClick(View v) {
//How Do I Call an Activity???
context.startActivity(new Intent(context,NewsActivity.class));
}
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_HEAD;
return TYPE_LIST;
}
}
公共类TabFragmentNews扩展了片段{
private static final String ARG_EXAMPLE=“this_是一个_常量”;
私有字符串示例_数据;
私人回收站;
ProgressBar ProgressBar;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u news,container,false);
progressBar=(progressBar)view.findViewById(R.id.progressBarNews);
recyclerView=(recyclerView)view.findviewbyd(R.id.recyclerView\u news);
//在这里执行异步任务类
新闻更新();
返回视图;
}
//用于执行异步任务的方法
公共无效新闻更新(){
新建背景任务(getActivity()).execute();
}
//在此处检查internet/网络连接
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
示例_data=getArguments().getString(ARG_示例);
Log.i(“使用创建的片段”,示例_数据);
}
公共静态选项卡FragmentNews newInstance(字符串示例参数){
TabFragmentNews TabFragmentNews=新TabFragmentNews();
Bundle args=新Bundle();
putString(ARG_示例,EXAMPLE_参数);
tabFragmentNews.setArguments(args);
返回碎片新闻;
}
//用于下载新闻信息的AsynTask类
类BackgroundTask扩展了AsyncTask{
上下文ctx;
活动;
RecyclerView.适配器;
RecyclerView.LayoutManager LayoutManager;
进行对话进行对话;
ArrayList ArrayList=新的ArrayList();
公共背景任务(上下文ctx){
this.ctx=ctx;
活动=(活动)ctx;
}
字符串json_字符串=”http://doubleclickug.com/app/newtest.php";
@凌驾
受保护的void onPreExecute(){
layoutManager=新的LinearLayoutManager(ctx);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
适配器=新的RecyclerAdapter(getContext(),arrayList);
recyclerView.setAdapter(适配器);
progressBar.setVisibility(View.VISIBLE);
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
URL=新URL(json_字符串);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
StringBuilder StringBuilder=新的StringBuilder();
弦线;
而((line=bufferedReader.readLine())!=null){
stringBuilder.append(行+“\n”);
}
httpURLConnection.disconnect();
String json_String=stringBuilder.toString().trim();
JSONObject JSONObject=新的JSONObject(json_字符串);
JSONArray JSONArray=jsonObject.getJSONArray(“服务器响应”);
整数计数=0;
while(countclass RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
ArrayList<News> arrayList = new ArrayList<>();
Context context;
public static final int TYPE_HEAD = 0;
public static final int TYPE_LIST = 1;
public RecyclerAdapter(Context context, ArrayList<News> arrayList) {
this.arrayList = arrayList;
this.context = context;
}
.....
.....
//RecyclerView Holder Class
class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView Details;
int viewType;
public RecyclerViewHolder(View view, int viewType) {
super(view);
view.setOnClickListener(this);
if (viewType == TYPE_LIST) {
Details = (TextView) itemView.findViewById(R.id.team);
this.viewType = TYPE_LIST;
} else if (viewType == TYPE_HEAD) {
this.viewType = TYPE_HEAD;
}
}
//handling Clicks of news elements here
@Override
public void onClick(View v) {
context.startActivity(new Intent(context,ActivityTwo.class));
}
}
RecyclerAdapter adapter = new RecyclerAdapter(this,mArrayList);
Intent intent = new Intent(context, YourActivityToStart.class);
startActivity(intent);
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
this.arrayList = arrayList;
}
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
this.arrayList = arrayList;
this.context = context;
}
adapter = new RecyclerAdapter(getContext(),arrayList);
adapter = new RecyclerAdapter(getActivity(),arrayList);
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
ArrayList<News> arrayList = new ArrayList<>();
public static final int TYPE_HEAD = 0;
public static final int TYPE_LIST = 1;
Context context;
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
this.arrayList = arrayList;
this.context = context;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEAD) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_header, parent, false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
return recyclerViewHolder;
} else if (viewType == TYPE_LIST) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_row_layout, parent, false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
return recyclerViewHolder;
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
if (holder.viewType == TYPE_LIST) {
News news = arrayList.get(position - 1);
holder.Details.setText(news.getDetails());
holder.itemView.setOnClickListener(new Listener(news));
holder.Details.setOnClickListener(new Listener(news));
}
}
@Override
public int getItemCount() {
return arrayList.size() + 1;
}
class Listener implements View.OnClickListener
{
News news;
Listener(News news)
{
this.news = news;
}
//handling Clicks of news elements here
@Override
public void onClick(View v) {
//how do I call a new Activity???
Intent intent = new Intent(context, YourActivityToStart.class);
context.startActivity(intent);
}
}
//RecyclerView Holder Class
class RecyclerViewHolder extends RecyclerView.ViewHolder {
TextView Details;
int viewType;
View itemView;
public RecyclerViewHolder(View view, int viewType) {
super(view);
this.itemView =view;
if (viewType == TYPE_LIST) {
Details = (TextView) itemView.findViewById(R.id.team);
this.viewType = TYPE_LIST;
} else if (viewType == TYPE_HEAD) {
this.viewType = TYPE_HEAD;
}
}
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_HEAD;
return TYPE_LIST;
}
private CustomItemsClickListener mCardViewClickListener;
public interface CustomItemsClickListener {
public void onCardViewItemClicked(View itemView, int position);
public CustomRecyclerViewAdapter(ArrayList<SomedataForYourItems> dataForItemsList, CustomItemsClickListener mCardViewClickListener){
this.mCardViewClickListener = mCardViewClickListener;
this.dataForItemsList= dataForItemsList;
}
public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView tv1;
public Button btnCustom1, btnCustom2;
public CardView container;
public CustomOrdersViewHolder(View view) {
super(view);
container = (CardView) view.findViewById(R.id.item_view);
tv1= (TextView) view.findViewById(R.id.tv1);
btnCustom1= (Button) view.findViewById(R.id.btnCustom1);
btnCustom2= (Button) view.findViewById(R.id.btnCustom1);
btnCustom1.setOnClickListener(this);
btnCustom2.setOnClickListener(this);
}
@Override
public void onClick(View cardViewitems) {
mCardViewClickListener.onCardViewItemClicked(cardViewitems, getAdapterPosition());
}
}
mAdapter = new CustomRecyclerViewAdapter(getYourArrayListData(),
new CustomRecyclerViewAdapter.CustomItemsClickListener () {
@Override
public void onCardViewItemClicked(View view, int position) {
//TODO cardview click
switch (view.getId()) {
case R.id.btnCustom1:
// TODO some actions for btn1
break;
case R.id.btnCustom2:
// TODO some actions for btn2
break;
}
}
});
mYRecyclerView.setAdapter(mAdapter);