2016-09-13 15 views
0

私はメールアプリを作っています。私の主な活動は、アプリが起動したときに呼び出され活動である - マニフェストのランチャーの活動となるように設定されています - 、受信トレイにメールし、私のプロフィールを送った私は、3つの断片を持っているAndroidでアプリ起動時にサーバからのフラグメントを更新する

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

私の主な活動で。私はサーバーからメールを送受信できます。

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

private SessionManager session; 
private SQLiteHandler db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    // SqLite database handler 
    db = new SQLiteHandler(getApplicationContext()); 
    // session manager 
    session = new SessionManager(getApplicationContext()); 

    if (!session.isLoggedIn()) { 
     Intent intent = new Intent(this, LoginActivity.class); 
     startActivity(intent); 
    } else { 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_one))); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_two))); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_three))); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     tabLayout.setTabMode(TabLayout.MODE_FIXED); 

     final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     final PagerAdapter adapter = new PagerAdapter 
       (getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

     ... 

私の受信トレイの断片では、私はthisの例を使ってサーバーから電子メールを取得します。しかし、問題があります。私がアプリを起動すると、送信されたメールの断片は更新されず、ユーザーにログインしたときにのみ更新されます。 私はアプリを起動するたびにフラグメントを更新するには

私は、メールを送った:

public class SentmailsFragment extends Fragment { 

private static final String TAG = SentmailsFragment.class.getSimpleName(); 

private ProgressDialog pDialog; 
private List<Sentmail> sentmailList = new ArrayList<>(); 
private ListView listView; 
private CustomListAdapter adapter; 

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_sentmails, container, false); 

    listView = (ListView) view.findViewById(R.id.sentmails_list); 
    adapter = new CustomListAdapter(getActivity(), sentmailList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(getActivity()); 

    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    SQLiteHandler db = new SQLiteHandler(getActivity().getApplicationContext()); 
    HashMap<String, String> user = db.getUserDetails(); 
    final String userId = user.get("uid"); 

    StringRequest sentmailReq = new StringRequest(Request.Method.POST, 
      AppConfig.URL_GET_SENT_MAIL, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "SentMail Response: " + response.toString()); 
      try { 
       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 

       if (!error) { 
        JSONArray sentmails = jObj.getJSONArray("sentmail"); 

        Log.d(TAG, response.toString()); 
        hidePDialog(); 

        // Parsing json 
        for (int i = 0; i < sentmails.length(); i++) { 
         try { 

          JSONObject obj = sentmails.getJSONObject(i); 
          Sentmail sentmail = new Sentmail(); 
          sentmail.setUserName(obj.getString("name")); 
          if (obj.getString("image") != null && !obj.getString("image").isEmpty()) { 
           sentmail.setThumbnailUrl(obj.getString("image")); 
          } 
          sentmail.setTitle(obj.getString("title")); 
          sentmail.setMessage(obj.getString("message")); 
          sentmail.setDate(obj.getString("event_date")); 
          sentmail.setTime(obj.getString("event_time")); 

          // adding sentmail to sentmail array 
          sentmailList.add(sentmail); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 

        adapter.notifyDataSetChanged(); 
       } else { 
        // Error. Get the error message 
        String errorMsg = jObj.getString("error_msg"); 
       } 
      } catch (JSONException e) { 
       // JSON error 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Sentmail Error: " + error.getMessage()); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("user_id", userId); 

      return params; 
     } 

    }; 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(sentmailReq, "req_return_sentmail"); 

    return view; 
} 
+0

どこの受信トレイフラグメントのコードはありますか? –

+0

@Vivek Mishra私は受信箱の断片コードを投稿することができますが、私は(これを)投稿しました[http://www.androidhive.info/2014/07/android-custom-listview-with-image-and-text-using-volley /]この例を使用したためです。私はあまりにも多くのコードを書いたくありませんでした。 – Kemo

+0

あなたが –

答えて

1

更新このようなあなたのメインのアクティビティコード:

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

private SessionManager session; 
private SQLiteHandler db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    // SqLite database handler 
    db = new SQLiteHandler(getApplicationContext()); 
    // session manager 
    session = new SessionManager(getApplicationContext()); 

    if (!session.isLoggedIn()) { 
     Intent intent = new Intent(this, LoginActivity.class); 
     startActivity(intent); 
    } else { 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_one))); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_two))); 
     tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_three))); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     tabLayout.setTabMode(TabLayout.MODE_FIXED); 

     final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     final PagerAdapter adapter = new PagerAdapter 
       (getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
if (tab.getPosition() == 1) { 

// call your sent email request and stored that in db after that in your fragment fetch the content from db and display it on ui 
} 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 
+0

DBに追加せずに表示する方法はありますか?私はそれをサーバーから直接更新したい。 – Kemo

+1

あなたの意図を使ってあなたのフラグメントに直接リストを送ることができます。しかし、これを行う前に、Listオブジェクトをシリアライズ可能またはパーセル可能に実装する必要があります。 – Anjali

+0

私はこれをやろうとします。上のコードでうまくいくはずですよね?あなたの助けをありがとう:) – Kemo

1

は毎回ユーザーがフラグメントのonResume()コールバックにアプリを起動更新する必要があなたのロジックの一部を移動します。

+0

すべてのフラグメントを更新するにはMainActivityに追加する必要がありますか? – Kemo

関連する問題