View Full Version : setonclicklisiner  در حلقه
  
mohsen.hex
پنج شنبه 16 مرداد 1393, 00: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
پنج شنبه 16 مرداد 1393, 00:37 صبح
خصوصیت Tag مربوط به هر کدام از باتون ها رو مقادیر دلخواه بدین،
 اینترفیس OnClickListener رو Implements کنید. 
خصوصیت setOnclikListener  همه باتن ها رو برابر this قرار بدین. 
توی onclick با استفاده از خصوصیت تگ می تونین تشخیص بدین  کدوم باتن کلیک شده.
اگه خواستین بگین تا کد کاملش رو بزارم.
smemamian
پنج شنبه 16 مرداد 1393, 00: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, 08: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, 11: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, 11: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, 16: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);
        }
         
    }
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.