Java Can';t使用listview行中的按钮添加Onclick操作
我是android开发的新手n funky。我开始学习,但被listview中的可点击按钮阻止了Java Can';t使用listview行中的按钮添加Onclick操作,java,android,listview,Java,Android,Listview,我是android开发的新手n funky。我开始学习,但被listview中的可点击按钮阻止了 `public class Test2 extends AppCompatActivity { private static final String TAG = "Test2"; Button btnEdytuj; DatabaseHelper myDb; SimpleCursorAdapter dataAdapter;` @Override protecte
`public class Test2 extends AppCompatActivity {
private static final String TAG = "Test2";
Button btnEdytuj;
DatabaseHelper myDb;
SimpleCursorAdapter dataAdapter;`
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test2);
myDb = new DatabaseHelper(this);
displayList();
}
private void displayList() {
Cursor cursor = myDb.getAllData();
String from[] = new String[]{myDb.COL_ID, myDb.COL_NAZWA, myDb.COL_LAT, myDb.COL_LON};
int to[] = new int[]{R.id.textView10, R.id.textView1, R.id.textView2, R.id.textView3};
dataAdapter = new SimpleCursorAdapter(this, R.layout.row_item_edit, cursor, from, to, 0);
ListView lv = (ListView) findViewById(R.id.listViewId);
lv.setAdapter(dataAdapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
btnEdytuj = (Button) view.findViewById(R.id.buttonEE);
btnEdytuj.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
// Do something
Intent intent = new Intent(Test2.this,Edytuj.class);
startActivity(intent);`
`公共类Test2扩展了AppCompative活动{
私有静态最终字符串TAG=“Test2”;
按钮btnEdytuj;
数据库助手myDb;
SimpleCursorAdapter数据适配器`
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test2);
myDb=新数据库助手(此);
显示列表();
}
私有void displayList(){
Cursor=myDb.getAllData();
字符串from[]=新字符串[]{myDb.COL_ID,myDb.COL_NAZWA,myDb.COL_LAT,myDb.COL_LON};
int to[]=新int[]{R.id.textView10,R.id.textView1,R.id.textView2,R.id.textView3};
dataAdapter=new SimpleCursorAdapter(此,R.layout.row\u item\u编辑,光标,从,到,0);
ListView lv=(ListView)findViewById(R.id.listViewId);
lv.setAdapter(数据适配器);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
btnEdytuj=(按钮)view.findViewById(R.id.buttonEE);
btnEdytuj.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
Intent Intent=新Intent(Test2.this,Edytuj.class);
星触觉(意向)`
我的愿望是通过按一行或一个按钮并传递一个id来处理编辑,通过意图触发器从列表中打开新的活动
我发现了一个错误,也许解决它会有帮助:
android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int,boolean)会错误地覆盖android.widget.ListView中的包私有方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//Write your code here
}
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//在这里编写代码
}
});
希望这能有所帮助。您必须将按钮onClick
方法放在Adapter
类中
正如您使用的SimpleCursorAdapter
,请用作参考。在您的列表适配器中执行以下操作:
此函数用于获取视图功能:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_note, null);
btnEdytuj = (Button) convertView.findViewById(R.id.buttonEE);
btnEdytuj.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
// Do something
}
});
}
return convertView;
}
另一个绑定视图:
@Override
public void bindView(View view, Context context, Cursor cursor){
int row_id = cursor.get('_id'); //Your row id (might need to replace)
Button button = (Button) view.findViewById(R.id.buttonEE);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
//ADD STUFF HERE you know which row is clicked. and which button
}
});
}
请在活动类中编写以下代码
MainActivity.java
ArrayList<MobileData> searchResults = getMobileData();
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MobileAdapter(this, searchResults));
public class MobileAdapter extends BaseAdapter {
private static ArrayList<MobileData> searchArrayList;
private LayoutInflater mInflater;
private Context context;
MobilezonDAO dao;
public MobileAdapter(Context context, ArrayList<MobileData> results) {
this.context = context;
searchArrayList = results;
mInflater = LayoutInflater.from(context);
dao = new MobilezonDAO(this.context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.mobile_row_view, null);
holder = new ViewHolder();
holder.mobileImage = (ImageView) convertView.findViewById(R.id.mobileImage);
holder.mobileName = (TextView) convertView.findViewById(R.id.mobileName);
holder.mobilePrice = (TextView) convertView.findViewById(R.id.mobilePrice);
holder.mobileBrand = (TextView) convertView.findViewById(R.id.mobileBrand);
holder.viewDetails = (Button) convertView.findViewById(R.id.viewDetails);
holder.addToCart = (Button) convertView.findViewById(R.id.addToCart);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mobileImage.setImageBitmap(searchArrayList.get(position).getMobileImage());
holder.mobileName.setText(searchArrayList.get(position).getMobileName());
holder.mobilePrice.setText("Price: $"+searchArrayList.get(position).getMobilePrice());
holder.mobileBrand.setText("Brand: "+searchArrayList.get(position).getMobileBrand());
holder.viewDetails.setBackgroundResource(R.drawable.view_details);
holder.viewDetails.setId(position);
holder.addToCart.setBackgroundResource(R.drawable.addtocart);
holder.viewDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MobileData mobileData = searchArrayList.get(holder.viewDetails.getId());
Intent intent= new Intent(context, MobileViewDetailsActivity.class);
intent.putExtra("ModelNumber", mobileData.getModelNumber());
context.startActivity(intent);
}
});
holder.addToCart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MobileData mobileData = searchArrayList.get(holder.viewDetails.getId());
CartData cartData = new CartData();
cartData.setUsername(emailid);
cartData.setModelNumber(mobileData.getModelNumber());
cartData.setPrice(mobileData.getMobilePrice());
cartData.setQuantity("1");
CartData tempCartData = dao.searchParticularCartData(cartData.getUsername(), cartData.getModelNumber());
if(tempCartData!=null && tempCartData.getQuantity()!=null && Integer.valueOf(tempCartData.getQuantity())>0){
Snackbar.make(view, "Selected Mobile already added in your cart.", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}else{
dao.insertCartData(cartData);
Snackbar.make(view, "Mobile has been successfully added in your cart.", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
});
return convertView;
}
static class ViewHolder {
ImageView mobileImage;
TextView mobileName;
TextView mobilePrice;
TextView mobileBrand;
Button viewDetails;
Button addToCart;
}
ArrayList searchResults=getMobileData();
最终ListView lv1=(ListView)findViewById(R.id.ListView01);
lv1.setAdapter(新的MobileAdapter(这是searchResults));
使用adapter类添加所有列表项,并在adapter类中添加按钮事件
MobileAdapter.java
ArrayList<MobileData> searchResults = getMobileData();
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MobileAdapter(this, searchResults));
public class MobileAdapter extends BaseAdapter {
private static ArrayList<MobileData> searchArrayList;
private LayoutInflater mInflater;
private Context context;
MobilezonDAO dao;
public MobileAdapter(Context context, ArrayList<MobileData> results) {
this.context = context;
searchArrayList = results;
mInflater = LayoutInflater.from(context);
dao = new MobilezonDAO(this.context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.mobile_row_view, null);
holder = new ViewHolder();
holder.mobileImage = (ImageView) convertView.findViewById(R.id.mobileImage);
holder.mobileName = (TextView) convertView.findViewById(R.id.mobileName);
holder.mobilePrice = (TextView) convertView.findViewById(R.id.mobilePrice);
holder.mobileBrand = (TextView) convertView.findViewById(R.id.mobileBrand);
holder.viewDetails = (Button) convertView.findViewById(R.id.viewDetails);
holder.addToCart = (Button) convertView.findViewById(R.id.addToCart);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mobileImage.setImageBitmap(searchArrayList.get(position).getMobileImage());
holder.mobileName.setText(searchArrayList.get(position).getMobileName());
holder.mobilePrice.setText("Price: $"+searchArrayList.get(position).getMobilePrice());
holder.mobileBrand.setText("Brand: "+searchArrayList.get(position).getMobileBrand());
holder.viewDetails.setBackgroundResource(R.drawable.view_details);
holder.viewDetails.setId(position);
holder.addToCart.setBackgroundResource(R.drawable.addtocart);
holder.viewDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MobileData mobileData = searchArrayList.get(holder.viewDetails.getId());
Intent intent= new Intent(context, MobileViewDetailsActivity.class);
intent.putExtra("ModelNumber", mobileData.getModelNumber());
context.startActivity(intent);
}
});
holder.addToCart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MobileData mobileData = searchArrayList.get(holder.viewDetails.getId());
CartData cartData = new CartData();
cartData.setUsername(emailid);
cartData.setModelNumber(mobileData.getModelNumber());
cartData.setPrice(mobileData.getMobilePrice());
cartData.setQuantity("1");
CartData tempCartData = dao.searchParticularCartData(cartData.getUsername(), cartData.getModelNumber());
if(tempCartData!=null && tempCartData.getQuantity()!=null && Integer.valueOf(tempCartData.getQuantity())>0){
Snackbar.make(view, "Selected Mobile already added in your cart.", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}else{
dao.insertCartData(cartData);
Snackbar.make(view, "Mobile has been successfully added in your cart.", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
});
return convertView;
}
static class ViewHolder {
ImageView mobileImage;
TextView mobileName;
TextView mobilePrice;
TextView mobileBrand;
Button viewDetails;
Button addToCart;
}
公共类MobileAdapter扩展BaseAdapter{
私有静态ArrayList searchArrayList;
私人停车场;
私人语境;
莫比尔宗道;
公共MobileAdapter(上下文、ArrayList结果){
this.context=上下文;
searchArrayList=结果;
mInflater=LayoutInflater.from(上下文);
dao=新的MobilezonDAO(this.context);
}
public int getCount(){
返回searchArrayList.size();
}
公共对象getItem(int位置){
返回searchArrayList.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
convertView=mInflater.充气(R.layout.mobile\u row\u视图,空);
holder=新的ViewHolder();
holder.mobileImage=(ImageView)convertView.findViewById(R.id.mobileImage);
holder.mobileName=(TextView)convertView.findViewById(R.id.mobileName);
holder.mobilePrice=(TextView)convertView.findViewById(R.id.mobilePrice);
holder.mobileBrand=(TextView)convertView.findViewById(R.id.mobileBrand);
holder.viewDetails=(按钮)convertView.findViewById(R.id.viewDetails);
holder.addToCart=(按钮)convertView.findViewById(R.id.addToCart);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.mobileImage.setImageBitmap(searchArrayList.get(position.getMobileImage());
holder.mobileName.setText(searchArrayList.get(position.getMobileName());
holder.mobilePrice.setText(“价格:$”+searchArrayList.get(位置).getMobilePrice());
holder.mobileBrand.setText(“品牌:+searchArrayList.get(position.getMobileBrand());
holder.viewDetails.setBackgroundResource(R.drawable.view\u详细信息);
holder.viewDetails.setId(位置);
持有者.附加部分.挫折背景资源(R.可提取.附加部分);
holder.viewDetails.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
MobileData MobileData=searchArrayList.get(holder.viewDetails.getId());
意向意向=新意向(上下文,MobileViewDetailsActivity.class);
intent.putExtra(“ModelNumber”,mobileData.getModelNumber());
背景。开始触觉(意图);
}
});
holder.addToCart.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
MobileData MobileData=searchArrayList.get(holder.viewDetails.getId());
CartData CartData=新的CartData();
cartData.setUsername(emailid);
setModelNumber(mobileData.getModelNumber());
setPrice(mobileData.getMobilePrice());
cartData.setQuantity(“1”);
CartData tempCartData=dao.SearchSpecificularCartData(CartData.getUsername(),CartData.getModelNumber());
if(tempCartData!=null&&tempCartData.getQuantity()!=null&&Integer.valueOf(tempCartData.getQ