Здравствуйте! Надеюсь вы мне поможете! Структура программы: MainActivity, сверху заголовок программы, два Item-а основного меню (обновить, настройки), TabHost. При запуске в Tabhost создаются 2 вкладки и привязываются 2 класса как содержимое вкладок. На первой кладке Listview (до второй еще не дошел), при создании вкладки Listview заполняется. Заполняется через AsyncTask (запрос на сайт, парсинг JSON)... Сейчас у меня стоит задача отработать кнопку обновления данных. Т.е. у меня не получается обратиться к ListView-у из MainActivity (на нем расположена кнопка "Обновить" в main_menu), который расположен в другом activity на вкладке TabHost. Возможно я изначально не правильно сделал архитектуру приложения. Конечно я могу сделать кнопку "обновить" для каждой вкладки по отдельности, но мне кажется это будет не красиво. Подскажите правильный путь... Вот MainActivity: | Код | package com.example.user.myapplication;
import org.json.JSONException; import org.json.JSONObject; import org.json.JSONArray;
import android.app.LocalActivityManager; import android.app.TabActivity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.util.Log;
import android.view.Menu; import android.view.MenuItem; import android.view.View;
import android.widget.ListView; import android.widget.ProgressBar; import android.widget.SimpleAdapter; import android.widget.TabHost; import android.widget.TextView; import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; import java.util.ArrayList; import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
public static String LOG_TAG = "my_log"; private ArrayList<HashMap<String, Object>> mCatList; private static final String TITLE = "catname"; // Верхний текст private static final String DESCRIPTION = "description"; // ниже главного private static final String ICON = "icon"; // будущая картинка
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabHost tabHost = (TabHost) findViewById(R.id.tabHost); Log.d(LOG_TAG, "Setup");
LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false); //setup(mLocalActivityManager); mLocalActivityManager.dispatchCreate(savedInstanceState); tabHost.setup(mLocalActivityManager); TabHost.TabSpec spec; Log.d(LOG_TAG, "TabSpec spec"); spec = tabHost.newTabSpec("tag1"); Log.d(LOG_TAG, "setContent");
spec.setContent(new Intent(this,atmActivity.class));
Log.d(LOG_TAG, "setIndicator"); spec.setIndicator("TAB 1"); Log.d(LOG_TAG, "addTab"); tabHost.addTab(spec);
Log.d(LOG_TAG, "TabSpec spec"); spec = tabHost.newTabSpec("tag2"); Log.d(LOG_TAG, "setContent");
//spec.setContent(R.id.tab2);
spec.setContent(new Intent(this,iptActivity.class)); Log.d(LOG_TAG, "setIndicator"); spec.setIndicator("TAB 2"); Log.d(LOG_TAG, "addTab"); tabHost.addTab(spec);
tabHost.setCurrentTab(0);
// new ParseTask().execute(); } private class ParseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null; BufferedReader reader = null; String resultJson = "";
@Override protected String doInBackground(Void... params) { // получаем данные с внешнего ресурса try { Log.d(LOG_TAG,"получаем данные с внешнего ресурса"); URL url = new URL("_Здесь URL, получаю JSON данные_");
urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream(); StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line; while ((line = reader.readLine()) != null) { buffer.append(line); } Log.d(LOG_TAG,"Получили данные"); resultJson = buffer.toString();
} catch (Exception e) { e.printStackTrace(); } return resultJson; }
@Override protected void onPostExecute(String strJson) { super.onPostExecute(strJson); // выводим целиком полученную json-строку Log.d(LOG_TAG, strJson);
JSONObject dataJsonObj = null;
try { dataJsonObj = new JSONObject(strJson); JSONArray atms = dataJsonObj.getJSONArray("atm");
ListView iptlist = (ListView) findViewById(R.id.iptlist);
mCatList = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> hm;
for (int i = 0; i < atms.length(); i++) { JSONObject atm = atms.getJSONObject(i);
hm = new HashMap<>(); hm.put(TITLE, atm.getString("ATMID")+" "+atm.getString("Name")); // Название hm.put(DESCRIPTION, atm.getString("datet")); // Описание
if (atm.getString("Status").equals("1")) { hm.put(ICON, R.drawable.circle_green);} else {hm.put(ICON, R.drawable.circle_red);}// Картинка
mCatList.add(hm);
String Atmid = atm.getString("ATMID"); String Atmname = atm.getString("Name"); String Status = atm.getString("Status"); String Datet = atm.getString("datet");
Log.d(LOG_TAG, "atmid: " + Atmid); Log.d(LOG_TAG, "atmname: " + Atmname); Log.d(LOG_TAG, "Status: " + Status); Log.d(LOG_TAG, "Datet: " + Datet); }
Log.d(LOG_TAG, "SimpleAdapter"); SimpleAdapter adapter = new SimpleAdapter( MainActivity.this, mCatList, R.layout.list_item, new String[]{TITLE, DESCRIPTION, ICON}, new int[]{R.id.text1, R.id.text2, R.id.img}); iptlist.setAdapter(adapter);
} catch (JSONException e) { e.printStackTrace(); } } }
public void sayHello(View V) throws JSONException { Log.d(LOG_TAG,"Пробуем заполнить ListView");
}
public void showname(View V) {
Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show();
} public void showpr(View V) throws JSONException {
}
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: { //Кнопка обновления Log.d(LOG_TAG,"Кнопка обновления");
ВОТ ТУТ не могу получить ListView, который находится на atmActivity
} return true;
case R.id.item2: Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show(); return true; }
return super.onOptionsItemSelected(item); } }
|
Заранее спасибо!
|