<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 1.背景 ? ? 在上篇中實現了分類信息音樂列表的實現,包括頁面和設計與實現,在此實現數據的請求和解決一個問題! ? ? 1)網絡數據請求 ? ? 2)優化點擊事件 ? ? 3)一個bug修復 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??![](https://box.kancloud.cn/2016-04-19_5715764f212c4.jpg) # 2.網絡數據請求 ? ? 里面的數據還是接口上提供的數據,所以在之前我們已經使用過SDK的網絡請求做了一些優化和總結,在此進行在此回顧下 : # ? ? (1)圖解 ![](https://box.kancloud.cn/2016-04-19_5715764d83595.jpg) # ? ?(2)說明 ? ? ? ? ? ?官方的SDK提供了Request方法,所以我們需要AsyncHandler 回調函數,我在這里進行了在此的封裝,使得AsyncHandler函數可以進行JSON數據解析操作,返回我們想要的數據。在這里只需要寫一個自定義的回調函數實現就可以了。 # 3.優化點擊事件 ? ? 在此之間ListView,GridView , RecyclerView沒有點擊效果,我怎么感覺怎么別扭,后就統一的用了一個點擊效。 本身是半透明的效果,點擊后透明度為0.8 ,這個還不錯。 *? ? selector.xml?* ~~~ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/app_color_zhu" android:state_pressed="true"></item> <item android:drawable="@color/app_color_whrit"></item> </selector> ~~~ ? ?*兩個顏色值 :* ~~~ <color name="app_color_whrit">#55FCFCFC</color> <color name="app_color_zhu">#88FCFCFC</color> ~~~ # 4.一個問題實現 ? ? ?在之前我們實現的時候,在加載MusicListActivity ,重新加載了數據,后重新啟動了MusicService ,變重新賦值了List集合,然后退出點擊下面熱門榜單的音樂,播放的不是點擊的音樂,而是剛剛打開MusicListActivity 的音樂。這是很簡單的道理,因為在返回MainActivity 的時候,并沒有重新給MusicService 賦值,所以問題來了? ? ? 解決: *? ? 一張圖看清楚過程 :* ??![](https://box.kancloud.cn/2016-04-19_5715764f7797f.jpg) ? ? ? ? 也就是說 在MusicListActivity 返回 MainActivity 的時候,我們需要重新的啟動MusicService ,賦值給List ; # 5.MusicListActivity 源碼 ?? ~~~ package cn.labelnet.maskmusic; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.util.SparseArray; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import cn.labelnet.adapter.MusicTypeListAdapter; import cn.labelnet.event.MusicListRecyclerOnItemClick; import cn.labelnet.framework.MusicService; import cn.labelnet.maskmusic.MainActivity.SwifRefushListener; import cn.labelnet.model.MusicModel; import cn.labelnet.net.MusicAsync; import cn.labelnet.net.MusicAsyncHandler; import cn.labelnet.net.MusicRequest; import cn.labelnet.ui.SpacesItemDecoration; public class MusicListActivity extends Activity implements MusicAsync, MusicListRecyclerOnItemClick, OnClickListener { /** * 控件 */ private TextView tv_list_type,tv_list_item_show; private RecyclerView list_recycler_view; private MusicTypeListAdapter musicTypeAdapter; private ImageView tv_list_return; private SparseArray<String> maps = new SparseArray<String>(); private final int REQUEST_CODE=123; /** * 網絡數據 */ private MusicRequest musicRequest = null; private MusicAsyncHandler musicHandler = null; /** * 數據保留 */ private List<MusicModel> musics = new ArrayList<MusicModel>(); private final String MUSIC_INTENT_KEY = "musics"; private final int MUSIC_INTENT_FLAG = 20001; /** * 和MusicService 通信 */ private Intent musicIntent = null; private final String MAIN_ACTIVIY_ACTION = "mainActivity.To.MusicService"; private final String MAIN_MUSIC_INTENT_KEY = "mIntent"; // 滾動條 private SwipeRefreshLayout swiperefresh_wei; private int typeid = 5; // private Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_music_list); initView(); initData(); initFrameWork(); initTypes(); initRefresh(); typeid=getIntent().getIntExtra("musictype", 5); // 進行數據請求 musicRequest.requestStringData(typeid); tv_list_type.setText(maps.get(typeid)); // Log.d("MaskMusic", typeid + "typeid"); } /** * 初始化進度條 */ private void initRefresh() { swiperefresh_wei = (SwipeRefreshLayout) findViewById(R.id.swiperefresh_wei); SwifRefushListener swifRefushListener = new SwifRefushListener(); swiperefresh_wei.setColorSchemeResources(R.color.app_color_zhu, R.color.app_color_zi, R.color.text_color_black, R.color.text_color_main); swiperefresh_wei.setSize(SwipeRefreshLayout.LARGE); // 設置進度條的位置 swiperefresh_wei.setProgressViewEndTarget(true, 800); // 設置監聽 swiperefresh_wei.setOnRefreshListener(swifRefushListener); // 首次加載開啟刷新 swiperefresh_wei.post(new Runnable() { @Override public void run() { swiperefresh_wei.setRefreshing(true); } }); swifRefushListener.onRefresh(); } /** * 初始化分類信息 */ private void initTypes() { maps.put(18, getString(R.string.music_fenlei_mingyao)); maps.put(23, getString(R.string.msuic_fenlei_xiaoliang)); maps.put(5,getString(R.string.music_fenlei_china)); maps.put(3,getString(R.string.music_fenlei_oumei)); maps.put(6,getString(R.string.music_fenlei_hangkang)); maps.put(16,getString(R.string.music_fenlei_hanguo)); maps.put(17,getString(R.string.music_fenlei_riben)); maps.put(19,getString(R.string.music_fenlei_yaogun)); maps.put(26,getString(R.string.music_list_resou)); } /** * 初始化組件 */ private void initFrameWork() { // 初始化MusicService 廣播組件Intent musicIntent = new Intent(); // 設置識別Action musicIntent.setAction(MAIN_ACTIVIY_ACTION); // 設置來源 musicIntent.addFlags(MUSIC_INTENT_FLAG); } /** * 初始化網絡請求數據 */ private void initData() { // 請求基本數據 musicHandler = new MusicAsyncHandler(); musicHandler.setMAsync(this); musicRequest = new MusicRequest(); musicRequest.setMusicAsyncHandler(musicHandler); } /** * 初始化界面 */ private void initView() { tv_list_item_show=(TextView) findViewById(R.id.tv_list_item_show); tv_list_return = (ImageView) findViewById(R.id.tv_list_return); tv_list_return.setOnClickListener(this); tv_list_type = (TextView) findViewById(R.id.tv_list_type); list_recycler_view = (RecyclerView) findViewById(R.id.list_recycler_view); // 設置是否固定長度 list_recycler_view.setHasFixedSize(true); // 添加樣式 list_recycler_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); // 添加item動畫 list_recycler_view.setItemAnimator(new DefaultItemAnimator()); // 添加item分割線 list_recycler_view.addItemDecoration(new SpacesItemDecoration(2)); // 添加適配器 musicTypeAdapter = new MusicTypeListAdapter(musics, this, this); list_recycler_view.setAdapter(musicTypeAdapter); } @Override public void onSuccess(List<MusicModel> mms) { // Log.d("MaskMusic", "MMS : " + mms); // 請求成功 synchronized (musics) { musics.clear(); musics.addAll(mms); musicTypeAdapter.notifyDataSetChanged(); } Intent intent = new Intent(MusicListActivity.this, MusicService.class); intent.putExtra(MUSIC_INTENT_KEY, (Serializable) musics); intent.addFlags(MUSIC_INTENT_FLAG); startService(intent); hideProgress(); } /** * 隱藏進度條 * 隱藏提示 */ private void hideProgress() { swiperefresh_wei.setRefreshing(false); tv_list_item_show.setVisibility(View.GONE); } @Override public void onFail(String msg) { // 請求失敗 showToast(msg); hideProgress(); } /** * Toast * * @param msg */ private void showToast(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } /** * 點擊事件 */ @Override public void onRecyclerItemClick(int position) { // Log.d("MaskMusic", "Position :"+position); musicIntent.putExtra(MAIN_MUSIC_INTENT_KEY, position); sendBroadcast(musicIntent); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_list_return: startActivityForResult(new Intent(MusicListActivity.this,MainActivity.class),REQUEST_CODE); finish(); break; } } @Override public void onBackPressed() { startActivityForResult(new Intent(MusicListActivity.this,MainActivity.class),REQUEST_CODE); finish(); } /** * 1.下拉刷新監聽 下拉刷新 */ class SwifRefushListener implements SwipeRefreshLayout.OnRefreshListener { @Override public void onRefresh() { handler.postDelayed(new Runnable() { @Override public void run() { //隱藏進度條 hideProgress(); } }, 3000); } } } ~~~ # 6.總結 ? ?在這里使用了v4兼容包下的SwipeRefreshLayout 進度條,在這里就不說明了,即方便又簡單的可以實現進度條功能;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看