بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

ارسال داده از یک کلاس به یک اکتیویتی

مدیریت گفتگو
reza1234 11 سال پیش
آخرین تغییر: 11 سال پیش

با سلام

دوستان چطور میشه از یک کلاسی که از اکتیویتی اکستندز نشده به یک کلاسی که از  اکتیویتی اکستندز شده داده ای رو ارسال کرد

ممنون

نظرات

پاسخ‌ها 4

MOJTABA 11 سال پیش

به نام خدا

شما می تونید توی اون کلاس یه متد یا چند متد بسازید که داده های مورد نظرتون رو به عنوان خروجی return کنه 

public class Test1{
.
.
.
.
public static String getData(){
return Data1;
}

}

حالا توی اکتیویتی موردنظرمون این متد را صدا می زنیم

 public class ActivityMain extends Activity {
.
.
String data = Test1.getData();
.
.
.
}

نظرات

reza1234 11 سال پیش
ممنون آقا مجتبی البته من یک رویداد کلیک دارم که میخوام با این رویداد یکسری اطلاعات به یه کلاس دیگه که از اکتیویتی اکسنتدز شده ارسال کنم و فکر میکنم با این روش شما امکان پذیر نیست
BrotherV 11 سال پیش

فکر میکنم شما میخواید بعد اجرای کامل کلاس نتیجه را با ایجاید یک رویداد به اکتیویتی منتقل کنه. مثلا تمام شدن دانلود را در انتها اعلام کنه. برای این کار بهتره شما یا از اینترفیس های موجود استفاده کنید یا یک اینترفیس بسازید. به طور مثال من یک اینترفیس ساختم و بعد از پایان کار نتیجه را به اینترفیس متصل میکنه و کافیه من اون اینترفیس را در اکتیویتی Override کنم.

در برنامه زیر بعد اتمام کپی اطلاعات دیتابیس متد Override شده در اکتیویتی فراخوانی و اجرا میشه. مثل کلیک کردن. ;)

public interface OnCopyDatabaseListener {
	    public void onCopy(boolean copy);
}

........
........

public class Database {

	    private OnCopyDatabaseListener listener;
	
    	public void copyDatabase() throws IOException {
		        OutputStream myOutput = new FileOutputStream(Database_Path
				        + Database_Name);
		        byte[] buffer = new byte[1024];
		        int lenght;
		        InputStream myInput = G.currentActivity.getAssets().open(Database_Name);
		        while ((lenght = myInput.read(buffer)) > 0) {
            			myOutput.write(buffer, 0, lenght);
		        }
		        myInput.close();
		        myOutput.flush();
        		myOutput.close();
		
		        if (listener != null) {
			            listener.onCopy(true);
		        }
	    }
	
    	public static void setOnCopyDatabaseListener(OnCopyDatabaseListener l) {
		        listener = l;
    	}
}

.........
.........

public class ActivityStartUp extends ActivityEnhanced {

    	@Override
	    protected void onCreate(Bundle savedInstanceState) {
		        super.onCreate(savedInstanceState);
		        setContentView(R.layout.activity_start_up);
		
		        Database.setOnCopyDatabaseListener(new OnCopyDatabaseListener() {
			            @Override
			            public void onCopy(boolean copy) {
				                //do something
            			}
		        });
	    }
}

نظرات

reza1234 11 سال پیش

ممنون

دوستان ببخشید که سوالم واضح نبود ولی من میخوام تو شکل زیر وقتی رو چک باکس کلیک میکنم بتونم تکست باتنها رو هم تغییر بدم.

نظرات

BrotherV 11 سال پیش
شما میخواید تکست دکمه ها را تغییر بدید وقتی که چک باکس تیک خورد؟!!
BrotherV 11 سال پیش

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

1- اول یک اینترفیس بسازید و به صورت زیر تعریفش کنید.

public interface OnSelectItemListener {
	public void onSelectItem();
} ........ ........

2- بعد از اون در کلاس لیست ویو اینترفیس را به صورت زیر اعمال کنید.

public class AdapterFavDataList extends ArrayAdapter<StructArrayData> {
    	private OnSelectItemListener listener;

	    public AdapterFavDataList(ArrayList<StructArrayData> array) {
		        super(G.context, R.layout.lstview_content, array);
	    }

	    public static class ViewHolder {
		        private TextView txt1;
        		private TextView txt2;
		        private CheckBox chk1;
		        private OnSelectItemListener listener;

		        public ViewHolder(View view) {

			            layLstFavImageContainer = (ViewGroup) view
					            .findViewById(R.id.layLstFavImageContainer);
			            txt1 = (TextView) view.findViewById(R.id.txtName);
			            txt2 = (TextView) view.findViewById(R.id.txtDetail);
			            chk1 = (CheckBox) view.findViewById(R.id.chk1);
        		}

		       /*
		        * 
		        */
        		public void fill(final ArrayAdapter<StructArrayData> array,
				        final StructArrayData item, final int position) {
			        txt2.setText(item.names);
			        txt2.setText(item.details);
			
			        chk1.setOnClickListener(new OnClickListener() {
				            @Override
				            public void onClick(View arg0) {
					                if (listener != null) {
                    						listener.onSelectItem();
                					}
            				}
			        });
        		}
	    }

	    @Override
	    public View getView(final int position, View convertView, ViewGroup parent) {
		        ViewHolder holder;

		        StructArrayData item = getItem(position);
		        if (convertView == null) {
             			convertView = G.inflater.inflate(R.layout.lstview_content,
					             parent, false);
             			holder = new ViewHolder(convertView);
             			convertView.setTag(holder);
		        } else {
			             holder = (ViewHolder) convertView.getTag();
		        }

		        if (this.listener != null) {
			            holder.listener = this.listener;
		        }
		        holder.fill(this, item, position);
            		return convertView;
	    }

	    public void setOnSelectItemListener(OnSelectItemListener l) {
		        listener = l;
    	}
}
..
..

3- از طرفی اگر کلاس G را تعریف کردید باید Adapter  مورد نظرتون را از جنس کلاس بسازید.

public static ArrayList<StructArrayData> dataArrayList = new ArrayList<StructArrayData>();
public static AdapterDataList dataAdapter;
..
..

4- حالا در اکتیویتی میتونید متد OnItemSelected را Override  کنید.

public class ActivityFavList extends ActivityEnhanced {

	   private ListView lstDataContent;
	   private Button btn1;
	   private Button btn1;
	
	   @Override
	   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
		  setContentView(R.layout.activity_list);
		
	  	btn1 = (TextView) findViewById(R.id.btnDone);
	  	btn2 = (TextView) findViewById(R.id.btnCancel);
	  	lstDataContent = (ListView) findViewById(R.id.lstDataContent);

		  G.dataAdapter = new AdapterFavDataList(G.dataArrayList);
		  lstDataContent.setAdapter(G.dataAdapter);
		  //
		  G.dataAdapter.OnSelectItemListener(new OnSelectItemListener() {
				    @Override
					   public void onSelectItem() {
				      		btn1.setText("تغییر نام دکمه");
   					}
				});
		  //
    }
}

نظرات

reza1234 11 سال پیش
خیلی از شما متشکرم آقا محسن
BrotherV 11 سال پیش
خواهش میکنم. موفق و پیروز باشید.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .