2015-10-23 18 views
8

Tôi muốn biết trạng thái hộp kiểm trong chế độ xem danh sách có thể mở rộng trong dữ liệu ứng dụng của tôi đến từ máy chủ.Cách nhận trạng thái hộp kiểm ở chế độ xem danh sách có thể mở rộng trong android

My ProductsCategory.java: -

public class ProductsCategory extends AppCompatActivity { 

    private ListView listView; 
    private GridView gridView; 
    ProductsAdapter adapter; 
    ProductsAdapterGridView adapterGridView; 
    ArrayList<Products> productsList = new ArrayList<>(); 
    String menu_id; 
    TextView textView,textViewfilter; 

    // Filter Class 
    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader = new ArrayList<>(); 
    HashMap<String, List<String>> listDataChild = new HashMap<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.produts_category); 

     Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setTitle("Shopping Mazza"); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 

     Intent i = getIntent(); 
     menu_id = i.getStringExtra("category"); 
     adapter = new ProductsAdapter(ProductsCategory.this,R.layout.product_page_list_view,productsList); 
     adapterGridView = new ProductsAdapterGridView(ProductsCategory.this,R.layout.products_page_grid_view,productsList); 
     expListView = (ExpandableListView) findViewById(R.id.filter_expandable_list_view); 
     listView = (ListView)findViewById(R.id.list_product); 
     gridView = (GridView)findViewById(R.id.list_product_grid); 
     textView = (TextView)findViewById(R.id.change_view); 
     textViewfilter = (TextView)findViewById(R.id.textView); 

     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(listView.getVisibility()==View.VISIBLE){ 
        listView.setVisibility(View.GONE); 
        gridView.setVisibility(View.VISIBLE); 
       } 
       else { 
        listView.setVisibility(View.VISIBLE); 
        gridView.setVisibility(View.GONE); 
       } 
      } 
     }); 

     textViewfilter.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (expListView.getVisibility() == View.VISIBLE) { 

        listDataHeader.clear(); 
        listDataChild.clear(); 

        listAdapter = new ExpandableListAdapter(ProductsCategory.this, listDataHeader, listDataChild); 
        expListView.setAdapter(listAdapter); 

        listAdapter.notifyDataSetChanged(); 
        expListView.setVisibility(View.GONE); 
       } 
       else { 
         expListView.setVisibility(View.VISIBLE); 

        // preparing list data 
        // prepareListData(); 
        new PrepareListData().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/filters&key=test123$"); 

        // Listview Group click listener 
        expListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 

         @Override 
         public boolean onGroupClick(ExpandableListView parent, View v, 
                int groupPosition, long id) { 
          // Toast.makeText(getApplicationContext(), 
          // "Group Clicked " + listDataHeader.get(groupPosition), 
          // Toast.LENGTH_SHORT).show(); 
          return false; 

         } 
        }); 

        // Listview Group expanded listener 
        expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 

         @Override 
         public void onGroupExpand(int groupPosition) { 
          Toast.makeText(getApplicationContext(), 
            listDataHeader.get(groupPosition) + " Expanded", 
            Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        // Listview Group collasped listener 
        expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { 

         @Override 
         public void onGroupCollapse(int groupPosition) { 
          Toast.makeText(getApplicationContext(), 
            listDataHeader.get(groupPosition) + " Collapsed", 
            Toast.LENGTH_SHORT).show(); 

         } 
        }); 

        // Listview on child click listener 
        expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

         @Override 
         public boolean onChildClick(ExpandableListView parent, View v, 
                int groupPosition, int childPosition, long id) { 

          Toast.makeText(
            getApplicationContext(), 
            listDataHeader.get(groupPosition) 
              + " : " 
              + listDataChild.get(
              listDataHeader.get(groupPosition)).get(
              childPosition), Toast.LENGTH_SHORT) 
            .show(); 
          return false; 
         } 
        }); 

       /* Intent i = new Intent(ProductsCategory.this,FilterClass.class); 
        i.putExtra("category_id",menu_id); 
        startActivity(i);*/ 
       } 
      } 
     }); 

     new Product().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/products&key=test123$"); 
    } 
    public class PrepareListData extends AsyncTask<String,Void,Void>{ 
     ProgressDialog dialog; 
     @Override 
     protected synchronized void onPreExecute() { 
      super.onPreExecute(); 
      dialog = new ProgressDialog(ProductsCategory.this); 
      dialog.setCancelable(false); 
      dialog.show(); 
     } 

     @Override 
     protected synchronized Void doInBackground(String... params) { 
      try { 
       HttpClient client = new DefaultHttpClient(); 
       HttpPost post = new HttpPost(params[0]); 
       List<NameValuePair> nameValuePairs = new ArrayList<>(1); 

       nameValuePairs.add(new BasicNameValuePair("category",menu_id)); 
       post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       HttpResponse response = client.execute(post); 

       if(response.getStatusLine().getStatusCode()==200){ 

        HttpEntity entity = response.getEntity(); 
        String data = EntityUtils.toString(entity); 

        JSONObject jsonObject = new JSONObject(data); 
        JSONArray jsonArray = jsonObject.getJSONArray("filters"); 

        //  Log.d("jsonarray",jsonArray.length()+""); 

        Log.d("filter",jsonArray+""); 

        for(int i=0;i<jsonArray.length();i++){ 

         JSONObject jsonObject1 = jsonArray.getJSONObject(i); 

         String s = jsonObject1.getString("filter_group_id"); 
         listDataHeader.add(jsonObject1.getString("name")); 

         JSONArray jsonArray1 = jsonObject1.getJSONArray("filter"); 

         List<String> firstlevel = new ArrayList<>(); 
         for(int j=0;j<jsonArray1.length();j++){ 

          JSONObject jsonObject11 = jsonArray1.optJSONObject(j); 

          String s1 = jsonObject11.getString("filter_id"); 
          String colorcode = jsonObject11.getString("colorcode"); 
          firstlevel.add(jsonObject11.getString("name")); 
         } 
         listDataChild.put(listDataHeader.get(i), firstlevel); 
         Log.d("listDataHeader", listDataHeader.get(i)+""); 
         Log.d("value of", firstlevel + ""); 
         Log.d("hash map", listDataChild.size() + ""); 
         // firstlevel.clear(); 
        } 
       } 
      }catch (IOException |JSONException e){ 
       Log.e("Error :", e.getMessage()); 
      } 
      return null; 
     } 
     @Override 
     protected synchronized void onPostExecute(Void aVoid) { 
      // super.onPostExecute(aVoid); 
      dialog.dismiss(); 
      listAdapter = new ExpandableListAdapter(ProductsCategory.this, listDataHeader, listDataChild); 
      // setting list adapter 
      expListView.setAdapter(listAdapter); 

     } 
    } 

My ExpandableListAdapter: -

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, 
           HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 

     final String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_item_filter, null); 


     } 

     TextView txtListChild = (TextView) convertView 
       .findViewById(R.id.lblListItem); 

     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_group_filter, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

Tôi muốn biết nút được hộp kiểm được kiểm tra và gọi một methods.One userdefine hơn điều khi tôi kiểm tra một hộp kiểm và nhóm collasped và sau đó một lần nữa mở rộng nhóm vị trí của hộp kiểm là thay đổi.

tôi đưa ảnh chụp của cả hai vị trí: -

enter image description here

khi tôi collasped và một lần nữa mở rộng vị trí hộp kiểm là sự thay đổi.

enter image description here

+0

là câu trả lời được cung cấp cho bạn? Nếu không phải là những gì còn thiếu/không rõ ràng? –

Trả lời

15

Nó thực sự giống với một listview với hộp kiểm. Bạn cần phải ghi nhớ trạng thái bên trong (ví dụ: với một mảng hoặc tập hợp boolean) và cung cấp một getter trên trạng thái.

  1. Lấy hộp kiểm từ bố trí con quý vị và thêm một người biết lắng nghe

    public class ExpandableListAdapter extends BaseExpandableListAdapter { 
        ... 
        private final Set<Pair<Long, Long>> mCheckedItems = new HashSet<Pair<Long, Long>>(); 
        ... 
        public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    
         ... 
    
         final CheckBox cb = (CheckBox) convertView.findViewById(R.id.your_checkbox_id); 
         // add tag to remember groupId/childId 
         final Pair<Long, Long> tag = new Pair<Long, Long>(
          getGroupId(groupPosition), 
          getChildId(groupPosition, childPosition)); 
         cb.setTag(tag); 
         // set checked if groupId/childId in checked items 
         cb.setChecked(mCheckedItems.contains(tag)); 
         // set OnClickListener to handle checked switches 
         cb.setOnClickListener(new OnClickListener() { 
    
          public void onClick(View v) { 
           final CheckBox cb = (CheckBox) v; 
           final Pair<Long, Long> tag = (Pair<Long, Long>) v.getTag(); 
           if (cb.isChecked()) { 
            mCheckedItems.add(tag); 
           } else { 
            mCheckedItems.remove(tag); 
           } 
          } 
         }); 
    
         ... 
    
        } 
        ... 
    } 
    
  2. Thêm một getter cho nhà nước kiểm tra của bạn

    public class ExpandableListAdapter extends BaseExpandableListAdapter { 
        ... 
        public Set<Pair<Long, Long>> getCheckedItems() { 
         return mCheckedItems; 
        } 
        ... 
    } 
    

Các thưa thớt điền Set chứa tất cả các kiểm tra nhóm/mục con. Bạn có thể gọi phương thức, ví dụ: trong hoạt động của bạn.

Về câu hỏi thứ hai: tôi giả sử khi thu gọn/mở rộng nhóm, con đã chọn không chính xác vì một số lượt xem con được sử dụng lại nội bộ hiện tại ở vị trí khác.

Cũng đừng quên các thuộc tính bố cục sau trên mục hộp kiểm để không phải sự kiện nhấp chuột lỏng lẻo cho mục con.

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

Thnx để được giúp đỡ làm việc của nó .......... tôi đã lãng phí 1 ngày cho nhiệm vụ này ........ – Sunil

Các vấn đề liên quan