安卓应用的导航栏有多种实现方式,在这里我主要是利用ScrollView实现导航栏,详细运行效果如图:
在这,我将我的主要的监听代码放在这,希望对大家有所帮助:
package com.hzhk.android_super_day03_homework; import android.annotation.TargetApi; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.hzhk.android_super_day03_homework.right.TitleItem; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RequestQueue mRequestQueue; private LinearLayout mRecyclerView; private List<String> mData; private List<TitleItem> mItemList; private String url = "http://api.liwushuo.com/v2/item_categories/tree"; private ListView mListView; private PersonalAdapter mPersonalAdapter; private ScrollView scrollView; private List<TextView> textViews; private int j=-1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (LinearLayout) findViewById(R.id.recyclerLeft); mListView = (ListView) findViewById(R.id.recyclerRight); scrollView= (ScrollView) findViewById(R.id.scrollView); mItemList = new ArrayList<>(); //右边 mPersonalAdapter = new PersonalAdapter(mItemList, this); mListView.setAdapter(mPersonalAdapter); //左边 textViews = new ArrayList<>(); mData = new ArrayList<>(); initData(); } private void initData() { mRequestQueue = CustomVolley.getInstance(this).mRequestQueue; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(JsonObjectRequest.Method.GET, url, null, //参数三,给服务器传参数的,如果是GET请求,参数可以是null //购物类App通过JSONObject给服务器传递参数 new Response.Listener<JSONObject>() { @TargetApi(Build.VERSION_CODES.M) @Override public void onResponse(JSONObject response) { JSONObject jsonObject = response.optJSONObject("data"); JSONArray jsonArray = jsonObject.optJSONArray("categories"); int length = jsonArray.length(); for (int i = 0; i < length; i++) { JSONObject optJSONObject = jsonArray.optJSONObject(i); TitleItem titleItem = new TitleItem(optJSONObject); mItemList.add(titleItem); try { String name = optJSONObject.getString("name"); mData.add(name); } catch (JSONException e) { e.printStackTrace(); } } dataNotify(); mPersonalAdapter.notifyDataSetChanged(); mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { if (i!=j) { for (int i3 = 0; i3 < mData.size(); i3++) { textViews.get(i3).setEnabled(true); } textViews.get(i).setEnabled(false); int height = getResources().getDisplayMetrics().heightPixels; TextView textView = textViews.get(i); int offset = textView.getTop()+2*textView.getHeight()-height/5 ; scrollView.scrollTo(0,offset); j=i; } } }); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(MainActivity.this, "数据异常", Toast.LENGTH_SHORT).show(); } } ); mRequestQueue.add(jsonObjectRequest); } private void dataNotify() { for (int i = 0; i < mData.size(); i++) { //String path = "Android" + i + ".txt"; final TextView textView = new TextView(this); textView.setBackgroundResource(R.drawable.color); textView.setEnabled(true); textView.setText(mData.get(i)); textView.setTextSize(16); textView.setPadding(5, 30, 5, 30); textView.setTag(i); textView.setGravity(Gravity.CENTER); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (((mData.size()-1)!=(Integer) v.getTag())&&((mData.size()-2)!=(Integer) v.getTag())) { for (int i1 = 0; i1 < mData.size(); i1++) { textViews.get(i1).setEnabled(true); } int i = (Integer) v.getTag(); textViews.get(i).setEnabled(false); mListView.setSelection(i); } } }); textViews.add(textView); mRecyclerView.addView(textView); } textViews.get(0).setEnabled(false); } }