Android 你的监听器坏了吗?
为什么我的Android 你的监听器坏了吗?,android,Android,为什么我的监听器不工作 public class UseAdp extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Con
监听器不工作
public class UseAdp extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Context context=this;
ListView lv=(ListView) findViewById(R.id.list_v);
MyAdapter adp=new MyAdapter(context);
for (int i = 0; i < 50; i++) {
adp.addItem("item " + i);
}
lv.setAdapter(adp);
// lv.setItemsCanFocus(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
showToast(arg2);
}
});
//registerForContextMenu(lv);
}
public void showToast(int arg)
{
Toast.makeText(this, "Position"+arg, Toast.LENGTH_SHORT).show();
}
}
公共类useapp扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
上下文=这个;
ListView lv=(ListView)findViewById(R.id.list\u v);
MyAdapter adp=新的MyAdapter(上下文);
对于(int i=0;i<50;i++){
adp.增补(“项目”+i);
}
低压设置适配器(adp);
//lv.setItemsCanFocus(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
showtoots(arg2);
}
});
//registerForContextMenu(lv);
}
公共void showtoos(内部参数)
{
Toast.makeText(这是“Position”+arg,Toast.LENGTH_SHORT).show();
}
}
以下是我的适配器代码:
public class MyAdapter extends BaseAdapter {
private Context mcontext;
private ArrayList<String> aList=new ArrayList<String>();
public MyAdapter(Context context) {
mcontext = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return aList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return aList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void addItem(final String item) {
aList.add(item);
//notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.list_rows,parent,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position).toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
if(position==2){
((CheckBox)convertView.findViewById(R.id.CheckBox01)).setChecked(true);
}
return convertView;
}
}
公共类MyAdapter扩展了BaseAdapter{
私有上下文;
private ArrayList aList=new ArrayList();
公共MyAdapter(上下文){
mcontext=上下文;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回aList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
公共无效附加项(最终字符串项){
1.增加(项目);
//notifyDataSetChanged();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutInflater充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(右布局。列表行,父,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position.toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
如果(位置==2){
((复选框)convertView.findviewbyd(R.id.CheckBox01)).setChecked(true);
}
返回视图;
}
}
试着用getListView()
而不是findViewById()
来填充您的ListView
(我假设您的活动扩展了ListActivity
)我想您没有使用viewholder()方法。我检查它时,它工作正常。
请参阅完整的代码:
public class FirstScreen extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lv=(ListView) findViewById(R.id.ListView01);
MyAdapter adp=new MyAdapter(getApplicationContext());
for (int i = 0; i < 50; i++) {
adp.addItem("item " + i);
}
lv.setAdapter(adp);
// lv.setItemsCanFocus(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
showToast(arg2);
}
});
//registerForContextMenu(lv);
}
public void showToast(int arg)
{
Toast.makeText(this, "Position"+arg, Toast.LENGTH_SHORT).show();
}
class MyAdapter extends BaseAdapter {
private Context mcontext;
private ArrayList<String> aList=new ArrayList<String>();
public MyAdapter(Context context) {
mcontext = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return aList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return aList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void addItem(final String item) {
aList.add(item);
//notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.list_row,parent,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position).toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
return convertView;
}
}
static class ViewHolder {
TextView tab1Text;
ImageView backgrouundView;
}
}
public class FirstScreen扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lv=(ListView)findViewById(R.id.ListView01);
MyAdapter adp=新的MyAdapter(getApplicationContext());
对于(int i=0;i<50;i++){
adp.增补(“项目”+i);
}
低压设置适配器(adp);
//lv.setItemsCanFocus(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
showtoots(arg2);
}
});
//registerForContextMenu(lv);
}
公共void showtoos(内部参数)
{
Toast.makeText(这是“Position”+arg,Toast.LENGTH_SHORT).show();
}
类MyAdapter扩展了BaseAdapter{
私有上下文;
private ArrayList aList=new ArrayList();
公共MyAdapter(上下文){
mcontext=上下文;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回aList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
公共无效附加项(最终字符串项){
1.增加(项目);
//notifyDataSetChanged();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutInflater充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(右布局。列表行,父,false);
((TextView)convertView.findViewById(R.id.txt1)).setText(getItem(position.toString());
((ImageView)convertView.findViewById(R.id.img1)).setImageResource(R.drawable.icon);
返回视图;
}
}
静态类视窗夹{
文本视图选项卡1文本;
图像视图背景视图;
}
}
这里不包括main.xml和list_行。它以什么方式“不起作用”?它当前的行为和预期的行为是什么?当我点击列表时,什么都不会发生。我可以在我的LinerLayout上同时插入ViewHolder吗?即每行列表视图上的背景吗?哦,当然你可以很容易地做到这一点。只需在ViewHolder中创建背景图像的实例,在getView()方法中接收它,然后使用以下代码:if(position==selectedListItem){holder.backgroundImage.setBackgroundColor(Color.LTGRAY);}else{holder.backgroundImage.setBackgroundResource(R.drawable.listing_bg_gray)}希望您能理解。