【问题标题】:Handle listview OnItemClick events in service处理服务中的 listview OnItemClick 事件
【发布时间】:2015-02-11 11:11:30
【问题描述】:

我在 android 编程中遇到了一个问题,我需要从服务创建一个列表视图,该列表视图工作正常并按预期显示项目。唯一的问题是我无法处理列表视图上的项目点击事件。我试图用谷歌搜索并找到一种方法,但没有成功。我怎么解决这个问题?下面是我的代码,

@SuppressWarnings("unused")
public class ContactsService extends Service implements OnClickListener,
 OnItemClickListener {


 private WindowManager mWindowManager;
 private View mChatHead;
 private LinearLayout mLayout, chatheadcontacts;


 private TextView hidetextView;
 private ImageView showView, cameraImageView;


 ListView contacts;
 public ArrayList<ContactListItem> contactsList;
    LayoutInflater inflater;


 @Override
 public IBinder onBind(Intent intent) {
 return null;
 }


 // @SuppressLint("NewApi")
 @Override
 public void onCreate() {
 super.onCreate();


 // Typeface tf = Typeface.createFromAsset(getAssets(),
 // "Roboto-Light.ttf");


 mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
 Display display = mWindowManager.getDefaultDisplay();
 /*
 * Point size = new Point(); display.getSize(size); screenWidth =
 * size.x; screenHeight = size.y;
 */


 inflater = LayoutInflater.from(this);
 mChatHead = inflater.inflate(R.layout.chathead, null);
 contacts = (ListView) mChatHead
 .findViewById(R.id.listView_chathead_contacts);
 mLayout = (LinearLayout) mChatHead
 .findViewById(R.id.chathead_linearlayout);


 chatheadcontacts = (LinearLayout) mChatHead
 .findViewById(R.id.chathead_contacts_layout);


        cameraImageView = (ImageView)mChatHead.findViewById(R.id.chathead_imageView_camera);
 hidetextView = (TextView) mChatHead.findViewById(R.id.textViewhide);
 showView = (ImageView) mChatHead.findViewById(R.id.imageViewShow);


 // mChatHeadTextView.setTypeface(tf);


 contactsList = new ArrayList<ContactListItem>();
 contactsList = getContacts();
 final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(
 WRAP_CONTENT, // Width
 LayoutParams.WRAP_CONTENT, // Height
 TYPE_PHONE, // Type
 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // Flag
 PixelFormat.TRANSLUCENT // Format
 );


 parameters.gravity = Gravity.RIGHT;


 contacts.setAdapter(new CustomChatheadListAdapter(getBaseContext(),
 contactsList));
 mWindowManager.addView(mChatHead, parameters);
 chatheadcontacts.setVisibility(View.GONE);
 hidetextView.setOnClickListener(this);
 showView.setOnClickListener(this);
 contacts.setOnItemClickListener(this);
        cameraImageView.setOnClickListener(this);
 }
@Override
 public void onItemClick(AdapterView<?> parent, View view, int position,
 long id) {
 Toast.makeText(getApplicationContext(), "Clicked "+position, Toast.LENGTH_SHORT)
 .show();


        Log.i("Clicked",""+position);
 // showPopup();
 }
}

谢谢。

【问题讨论】:

  • 确保 ListView 项目视图不包含任何可聚焦的视图,如 Button。
  • 如果我明白你的意思,每个列表视图项只有一个图像视图。

标签: android android-listview android-service onclicklistener


【解决方案1】:

在您的activity 中,声明并引用您的列表视图,而不是直接实现onItemClickListener

然后,试试下面的代码

listview.setOnItemClickListener(new OnItemClickListener(){


@Override
public void onItemClick(AdapterView<?>adapter,View v, int position){

ItemClicked item = adapter.getItem(position);

// do your action

}


});

在你的适配器的getItem 你写

public ItemClicked getItem(int position){

return items.get(position);
}

【讨论】:

  • 你的代码在这里有语法错误 ItemClicked item = adapter.getItem(position);
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多