ارسال داده از یک کلاس به یک اکتیویتی
با سلام
دوستان چطور میشه از یک کلاسی که از اکتیویتی اکستندز نشده به یک کلاسی که از اکتیویتی اکستندز شده داده ای رو ارسال کرد
ممنون
به نام خدا
شما می تونید توی اون کلاس یه متد یا چند متد بسازید که داده های مورد نظرتون رو به عنوان خروجی return کنه
public class Test1{
.
.
.
.
public static String getData(){
return Data1;
}
}
حالا توی اکتیویتی موردنظرمون این متد را صدا می زنیم
public class ActivityMain extends Activity {
.
.
String data = Test1.getData();
.
.
.
}
فکر میکنم شما میخواید بعد اجرای کامل کلاس نتیجه را با ایجاید یک رویداد به اکتیویتی منتقل کنه. مثلا تمام شدن دانلود را در انتها اعلام کنه. برای این کار بهتره شما یا از اینترفیس های موجود استفاده کنید یا یک اینترفیس بسازید. به طور مثال من یک اینترفیس ساختم و بعد از پایان کار نتیجه را به اینترفیس متصل میکنه و کافیه من اون اینترفیس را در اکتیویتی 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
}
});
}
}
ممنون
دوستان ببخشید که سوالم واضح نبود ولی من میخوام تو شکل زیر وقتی رو چک باکس کلیک میکنم بتونم تکست باتنها رو هم تغییر بدم.
برای این کار همون راهی را که گفتم باید انجام بدید اما از اونجایی که شما لیست ویو ساختید و احتمالا خود لیست ویو را هم با کانستراکتور ساختید باید به صورت زیر که کد نویسیش را براتون میزارم انجام بدید.
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("تغییر نام دکمه");
}
});
//
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .