PDA

View Full Version : setonclicklisiner در حلقه



mohsen.hex
چهارشنبه 15 مرداد 1393, 23:16 عصر
سلام
من تعدادی باتون دارم و میخام با دستور setonclicklis... برم توی یک اکتیویتی دیگه و یک سری دیتا که مربوط به این باتوم هست رو نمایش و ویرایش و ذخیره کنم
مشکلم اینجاست که توی اکتیویتی دوم باید بدونم کدوم دیتا رو تغیر بدم و عددی رو ارسال میکنم!!
در مثال زیر هرکدام از کلید ها رو تاچ کنم عدد 3 ارسال میشه!!
ولی متاسفانه در هر صورت اخرین عدد را ارسال میکند!!

btn[x=0].setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
btn_press_id=x+1;

Intent mainIntent = new Intent(Edit_menu_activity.this , get_data.class );
mainIntent.putExtra("ID", String.valueOf(x));
startActivity(mainIntent);
}
});

} catch (Exception e) {
Log.i("sssss",e.toString());

}



btn[x=1].setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
btn_press_id=x+1;

Intent mainIntent = new Intent(Edit_menu_activity.this , get_data.class );
mainIntent.putExtra("ID", String.valueOf(x));
startActivity(mainIntent);
}
});

} catch (Exception e) {
Log.i("sssss",e.toString());
}



btn[x=3].setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
btn_press_id=x+1;

Intent mainIntent = new Intent(Edit_menu_activity.this , get_data.class );
mainIntent.putExtra("ID", String.valueOf(x));
startActivity(mainIntent);
}
});

} catch (Exception e) {
Log.i("sssss",e.toString());
}









ایا راهی هست که setonclick lis.... رو داخل حلقه بزارم اخه داخل حلقه هم میزارمش متاسفانه اخرین مقداری که در for ساخته میشه ارسال میشه!!

akbar8298
چهارشنبه 15 مرداد 1393, 23:37 عصر
خصوصیت Tag مربوط به هر کدام از باتون ها رو مقادیر دلخواه بدین،
اینترفیس OnClickListener رو Implements کنید.
خصوصیت setOnclikListener همه باتن ها رو برابر this قرار بدین.
توی onclick با استفاده از خصوصیت تگ می تونین تشخیص بدین کدوم باتن کلیک شده.



اگه خواستین بگین تا کد کاملش رو بزارم.

smemamian
چهارشنبه 15 مرداد 1393, 23:48 عصر
سلام
توی سوال پرسیدن جواب های خودتون رو نذارید و فقط اصل سوال رو بپرسید.
سوال به این شکل گیج کننده است.

نکته مهم: اصل اولیه در اصول مهندسی نرم افزار : زمان مرگ نرم افزار، تغییرات هست. پس طوری باید کدهاتون رو بنویسید که درصورتی
که در آینده دوباره خواستید تغییراتی ایجاد کنید، دچار سردرگمی نشوید(در بیشتر مواقع نرم افزار به علت نامفهوم بودن، حتی برای خود نویسنده
کنار گذاشته می شود.).

شما باید OnClickListener رو implements کنید. نمونه :

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);

.
.
.
}


بعد از این پیاده سازی، یک تابعی به اسم onClick به صورت خودکار برای شما ایجاد می شود (Override) :

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {

case R.id.one:{
Intent intent = new Intent(this,yourclass.class);
intent.putExtra("key","value");
startactivity(intent);
}break;




default:
break;
}
}

mohsen.hex
پنج شنبه 16 مرداد 1393, 07:35 صبح
خیلی ممنون که جواب دادین

دوباره به مشکل بر خوردم:گریه:

کد رو نوشتم ولی حساس به کلیک نیست!!:عصبانی++:
اگه امکانش هست لطفا راهنمایی کنید

package com.automation;




import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class Edit_menu_activity extends Activity implements OnClickListener{


private String TAG="Edit_menu_activity";


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_main);

}



@Override
protected void onStart() {

super.onStart();
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {

case R.id.button1:{
Log.i(TAG,"AAAAAAAA");
Intent intent = new Intent(this,get_data.class);
intent.putExtra("ID","1");
startActivity(intent);
}break;




default:
Log.i(TAG,"SSSSSSSSSS");
break;
}
}


}

smemamian
پنج شنبه 16 مرداد 1393, 10:00 صبح
توی Editor متنی نوشتم، خودت تستش کن:

package com.automation;




import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class Edit_menu_activity extends Activity implements OnClickListener{

private Button btn ;
private String TAG="Edit_menu_activity";


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_main);
//for views
setListenerViews();

}

private void setListenerViews(){
btn = (Button)findViewById(R.id.button1);

btn.setOnClickListener(this);

}

@Override
protected void onStart() {

super.onStart();
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {

case R.id.button1:{
Log.i(TAG,"AAAAAAAA");
Intent intent = new Intent(this,get_data.class);
intent.putExtra("ID","1");
startActivity(intent);
}break;




default:
Log.i(TAG,"SSSSSSSSSS");
break;
}
}


}

akbar8298
پنج شنبه 16 مرداد 1393, 10:02 صبح
خیلی ممنون که جواب دادین

دوباره به مشکل بر خوردم:گریه:

کد رو نوشتم ولی حساس به کلیک نیست!!:عصبانی++:
اگه امکانش هست لطفا راهنمایی کنید

package com.automation;




import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class Edit_menu_activity extends Activity implements OnClickListener{


private String TAG="Edit_menu_activity";


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_main);

}



@Override
protected void onStart() {

super.onStart();
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {

case R.id.button1:{
Log.i(TAG,"AAAAAAAA");
Intent intent = new Intent(this,get_data.class);
intent.putExtra("ID","1");
startActivity(intent);
}break;




default:
Log.i(TAG,"SSSSSSSSSS");
break;
}
}


}



باید خصوصیت OnClickListener هر کدوم از باتن ها رو بهشون اختصاص بدین.

بصورت زیر

for(int i = 0 ; i<btn.length() ; i++)
btn[i].setOnClickListener(this);

mohsen.hex
پنج شنبه 16 مرداد 1393, 15:29 عصر
خیلی ممنون از کمک هاتون
من به این شکل در اوردمش :لبخندساده:
قشنگ شده نه:لبخند:
@Override
public void onClick(View v) {

for(x=0;x<NumberOfKey ; x++)
if(v.getId() == btn[x].getId())
{
Log.i(TAG,"11111111");
Intent intent = new Intent(this,get_data.class);
intent.putExtra("ID",String.valueOf(x+1));
startActivity(intent);
}

}