Android 为所选项目设置OnClickListener
我有一些从mysql数据库收集的数据到listview(这是一个铃声应用程序)。。现在我需要为所选项目设置onClickListener on play imageButon。。 我知道如何设置onClickListener,但在这种情况下,我不知道如何为所选项目设置它 这就是我到目前为止所做的:Android 为所选项目设置OnClickListener,android,listview,android-json,Android,Listview,Android Json,我有一些从mysql数据库收集的数据到listview(这是一个铃声应用程序)。。现在我需要为所选项目设置onClickListener on play imageButon。。 我知道如何设置onClickListener,但在这种情况下,我不知道如何为所选项目设置它 这就是我到目前为止所做的: public class ListActivity extends AppCompatActivity implements AsyncResponse ,AdapterView.OnItemClic
public class ListActivity extends AppCompatActivity implements AsyncResponse
,AdapterView.OnItemClickListener{
private boolean paused = true;
URL url;
Bitmap bmImg = null;
public static final int NOTIFICATION_ID = 1;
final String LOG = "ListActivity";
private ArrayList<Product> productList;
private ListView lvProduct;
private FunDapter<Product> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.d_activity_list_d);
ImageLoader.getInstance().init(UILConfig.config(ListActivity.this));
PostResponseAsyncTask taskRead = new PostResponseAsyncTask(ListActivity.this, this);
taskRead.execute("http://symphonyrecords.6te.net/product.php");
lvProduct = (ListView)findViewById(R.id.lvProduct);
registerForContextMenu(lvProduct);
}//onCreate
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final Product selectedProduct = adapter.getItem(info.position);
Log.d(LOG, selectedProduct.name);
if(item.getItemId() == R.id.menuUpdate){
Intent in = new Intent(ListActivity.this, DetailActivity.class);
in.putExtra("product", selectedProduct);
startActivity(in);
}
return super.onContextItemSelected(item);
}
@Override
public void processFinish(String s) {
productList = new JsonConverter<Product>().toArrayList(s, Product.class);
BindDictionary<Product> dict = new BindDictionary<Product>();
dict.addStringField(R.id.tvName, new StringExtractor<Product>() {
@Override
public String getStringValue(Product product, int position) {
return product.name;
}
});
adapter = new FunDapter<>(
ListActivity.this, productList, R.layout.d_layout_list_d, dict);
lvProduct.setAdapter(adapter);
lvProduct.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Product selectedProduct = productList.get(position);
}
public void playAndPause(View view1){
ImageButton button = (ImageButton ) findViewById(R.id.playPause);
int icon;
if (paused) {
paused = false;
icon = R.drawable.ic_pause;
Toast.makeText(ListActivity.this, "Playing", Toast.LENGTH_LONG).show();
}
else {
paused = true;
icon = R.drawable.ic_play;
Toast.makeText(ListActivity.this, "Stopped", Toast.LENGTH_LONG).show();
}
button.setImageDrawable(
ContextCompat.getDrawable(getApplicationContext(), icon));
}
}
公共类ListActivity扩展AppCompatActivity实现异步响应
,AdapterView.OnItemClickListener{
private=true;
网址;
位图bmImg=null;
公共静态最终整数通知_ID=1;
最终字符串LOG=“ListActivity”;
私有ArrayList产品列表;
私有ListView产品;
私人基金适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.d\u活动\u列表\u d);
ImageLoader.getInstance().init(UILConfig.config(ListActivity.this));
PostResponseAsyncTask taskRead=新的PostResponseAsyncTask(ListActivity.this,this);
taskRead.execute(“http://symphonyrecords.6te.net/product.php");
lvProduct=(ListView)findViewById(R.id.lvProduct);
registerForContextMenu(lvProduct);
}//一次创建
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。列表\上下文菜单,菜单);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)项。getMenuInfo();
最终产品selectedProduct=adapter.getItem(信息位置);
Log.d(Log,selectedProduct.name);
if(item.getItemId()==R.id.menuUpdate){
Intent in=新的Intent(ListActivity.this,DetailActivity.class);
在.putExtra中(“产品”,选择的产品);
星触觉(in);
}
返回super.onContextItemSelected(项目);
}
@凌驾
公共void processFinish(字符串s){
productList=new JsonConverter().toArrayList(s,Product.class);
BindDictionary dict=新建BindDictionary();
dict.addStringField(R.id.tvName,新StringExtractor(){
@凌驾
公共字符串getStringValue(产品,int位置){
返回产品名称;
}
});
适配器=新的FunDapter(
ListActivity.this、productList、R.layout.d\u layout\u list\u d、dict);
lvProduct.setAdapter(适配器);
lvProduct.setOnItemClickListener(this);
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Product Selected Product=productList.get(位置);
}
公共无效播放和暂停(视图1){
ImageButton按钮=(ImageButton)findViewById(R.id.playPause);
int图标;
如果(暂停){
暂停=错误;
icon=R.drawable.ic\u暂停;
Toast.makeText(ListActivity.this,“Playing”,Toast.LENGTH_LONG.show();
}
否则{
暂停=真;
icon=R.drawable.ic\u播放;
Toast.makeText(ListActivity.this,“Stopped”,Toast.LENGTH_LONG.show();
}
button.setImageDrawable(
getDrawable(getApplicationContext(),icon));
}
}
像这样更改getView方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Inflate a new view or use a recycled view.
View v = convertView;
GenericViewHolder holder;
if (null == v) {
LayoutInflater vi =
(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(mLayoutResource, null);
holder = new GenericViewHolder();
holder.root = v;
// There must be view name of that play button
holder.playButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
//do your task over here
}
// init the sub views and put them in a holder instance
FunDapterUtils.initViews(v, holder, mBindDictionary);
v.setTag(holder);
} else {
holder = (GenericViewHolder) v.getTag();
}
}
发布适配器classI使用的外部库(FunDapter)的代码…然后你不能这样做。为什么只需要使用其他适配器来显示视图?如果可以,制作自己的适配器。或者可能是适配器有一些回调给您视图引用,我需要这个库有很多原因。。但是你的回答很有帮助