説明が少し難しい問題があります。私は旅行計画のためのアンドロイドアプリケーションを構築しています。私は、マップ項目といくつかの他のボタンとサーバーとの通信が完了し、パスが地図上に表示されるAsyncTaskクラスを含む主なアクティビティを持っています。私はsqlliteデータベースでサーバーからの応答を保存することによって、オフラインで作業しようとしています。Android:onClickメソッドのあるアクティビティから別のアクティビティにオブジェクトを渡してAsyncTaskクラスに使用する方法
私はMainActivityというアクティビティを持っています。そこに、私はメニュー項目
public boolean onOptionsItemSelected(final MenuItem pItem) {
switch (pItem.getItemId()) {
case R.id.recent_trips:
startActivity(new Intent(this, recentTripsActivity.class));
break;
default:
break;
}
return false;
}
}
ための方法を持ってここで私は、メニューボタンからrecent_tripsをクリックすると
btnPlanTrip.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tripReq = new TripRequest(MainActivity.this,activityHandler,db);
tripReq.execute(request);
}
});
}
は、recentTripsActivityが開きAsyncTaskクラスを呼び出すための現在の方法です。基本的には、このクラスではmysqlliteデータベースからいくつかのデータを取得し、それをアダプタを介してlistViewに表示します。そこには、リスト項目がクリックされたときに特定の値(res = listItem.getofflineResult();)を取るメソッドview.setOnClickListenerがあります。メインアクティビティでこの値を使用したいと思います(詳細は下記を参照してください)。 ここにコードがあります。
public class recentTripsActivity extends Activity implements Serializable {
private ImageButton stopSearch;
private AutoCompleteTextView searchField;
SQLiteDatabase db;
OfflineTripRequest tripReq;
String res;
//db = openOrCreateDatabase("AndroidDatabase.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
private ListView listview;
private ArrayList mListItem;
ItemBO listItem;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recent_trips);
//open database connection
db = openOrCreateDatabase("AndroidDatabase.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
int i=0;
String [] str={"id","description","offlineResult"};
listview = (ListView) findViewById(R.id.lview_trips);
mListItem = new ArrayList<ItemBO>();
Cursor cursor = db.query("tbl_offlinePathResult",str, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
i++;
ItemBO listItem = new ItemBO(i,cursor.getString(1),cursor.getString(2));
mListItem.add(listItem);
cursor.moveToNext();
if(i==10){
break;
}
}
// Make sure to close the cursor
cursor.close();
i++;
listview.setAdapter(new ListAdapter(recentTripsActivity.this, R.id.lview_trips,mListItem));
db.close();
}
//***ListAdapter***
class ListAdapter extends ArrayAdapter { //--CloneChangeRequired
private ArrayList mList; //--CloneChangeRequired
private Context mContext;
@SuppressWarnings("unchecked")
public ListAdapter(Context context, int textViewResourceId,
ArrayList list) { //--CloneChangeRequired
super(context, textViewResourceId, list);
this.mList = list;
this.mContext = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
try {
if (view == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.list_item_saved_paths, null); //--CloneChangeRequired(list_item)
}
final ItemBO listItem = (ItemBO) mList.get(position); //--CloneChangeRequired
if (listItem != null) {
// setting list_item views
((TextView) view.findViewById(R.id.tv_name))
.setText(listItem.getDescription());
view.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) { //--clickOnListItem
res=listItem.getofflineResult();
}
});
}
} catch (Exception e) {
Log.i(recentTripsActivity.ListAdapter.class.toString(), e.getMessage());
}
return view;
}
}
}
私はAsyncTaskクラスを呼び出し、そのクラスにそのデータを渡したいことやった後MainActivityに。(RES = listItem.getofflineResult()上記のデータを渡したいと思います。どのようにすることができます私はlistItemをクリックすることでこれを行うのですか?地図がMainActivityにある前に言ったように、別のアクティビティからクリックが発生します。 ご質問がありましたらご遠慮なくご相談ください
ありがとうございました。 –
@phedonrousouうれしいことを聞いてうれしいです。 :) –