为什么单击任何项目时应用程序停止工作?
Why the application stopped working when clicked on any item?
我正在研究 recyclerview。最近我添加了一个项目点击侦听器,但是当我点击该项目时应用程序停止工作。
这是适配器 class:
public class RVAdapter extends
RecyclerView.Adapter<RVAdapter.ItemViewHolder> {
ArrayList<String>itemlist;
Clicklistener clicklistener=null;
public void setClicklistener(Clicklistener clicklistener) {
this.clicklistener = clicklistener;
}
public RVAdapter(ArrayList<String> itemlist) {
this.itemlist = itemlist;
}
public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView text;
public ItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
text= (TextView) itemView.findViewById(R.id.itemtextView);
}
@Override
public void onClick(View v) {
if(clicklistener!=null)
clicklistener.itemClicked(v,getAdapterPosition());
}
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
ItemViewHolder iv=new ItemViewHolder(v);
return iv;
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.text.setText(itemlist.get(position));
}
@Override
public int getItemCount() {
return itemlist.size();
}
}
这里是主要的class:
public class MainActivity extends AppCompatActivity implements Clicklistener {
ArrayList<String> list;
RecyclerView recyclerView;
RVAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
list=new ArrayList<>();
list.add("ABC");
list.add("DEF");
list.add("GHI");
list.add("JKL");
recyclerView= (RecyclerView) findViewById(R.id.RV);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter=new RVAdapter(list);
adapter.setClicklistener(this);
recyclerView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void itemClicked(View view, int position) {
Toast.makeText(getBaseContext(),position,Toast.LENGTH_SHORT).show();
}
}
和界面
public interface Clicklistener {
void itemClicked(View view, int position);
}
你将 int
位置传递给 Toast.makeText()
,它认为它是一个资源 ID 值,并停止并显示如下消息:'could not find string with id ...'
只需将其替换为String.valueOf(position)
。
我正在研究 recyclerview。最近我添加了一个项目点击侦听器,但是当我点击该项目时应用程序停止工作。
这是适配器 class:
public class RVAdapter extends
RecyclerView.Adapter<RVAdapter.ItemViewHolder> {
ArrayList<String>itemlist;
Clicklistener clicklistener=null;
public void setClicklistener(Clicklistener clicklistener) {
this.clicklistener = clicklistener;
}
public RVAdapter(ArrayList<String> itemlist) {
this.itemlist = itemlist;
}
public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView text;
public ItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
text= (TextView) itemView.findViewById(R.id.itemtextView);
}
@Override
public void onClick(View v) {
if(clicklistener!=null)
clicklistener.itemClicked(v,getAdapterPosition());
}
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
ItemViewHolder iv=new ItemViewHolder(v);
return iv;
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.text.setText(itemlist.get(position));
}
@Override
public int getItemCount() {
return itemlist.size();
}
}
这里是主要的class:
public class MainActivity extends AppCompatActivity implements Clicklistener {
ArrayList<String> list;
RecyclerView recyclerView;
RVAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
list=new ArrayList<>();
list.add("ABC");
list.add("DEF");
list.add("GHI");
list.add("JKL");
recyclerView= (RecyclerView) findViewById(R.id.RV);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter=new RVAdapter(list);
adapter.setClicklistener(this);
recyclerView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void itemClicked(View view, int position) {
Toast.makeText(getBaseContext(),position,Toast.LENGTH_SHORT).show();
}
}
和界面
public interface Clicklistener {
void itemClicked(View view, int position);
}
你将 int
位置传递给 Toast.makeText()
,它认为它是一个资源 ID 值,并停止并显示如下消息:'could not find string with id ...'
只需将其替换为String.valueOf(position)
。