2013-09-17 2 views
1

Я использую ленивый список для моего списка. Я пытаюсь получить URL-адрес изображения и текст в списке с помощью выбора флажка, но оба они всегда идут нерегулярно, но позиция списка идет правильно. В то же время, когда я нажимаю первый флажок, он выбирает все флажки, и когда я выбираю второй флажок, все равно, что флажок выбирается ниже, это мой код. Кто-нибудь может объяснить, почему данные не получают должным образом.Получить данные из ленивого браузера не работает Андроид

 class AllLiteratures extends AsyncTask<String, Void, String> { 


    private ProgressDialog dialog = new ProgressDialog(LiteratureList.this); 
    @Override 
    public void onPreExecute() { 
     if(litList == null) { 

      // setup your dialog here 
      dialog.setMessage("Loading..."); 
      dialog.setCancelable(false); 
      dialog.show(); 
     } 
    } 
    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     String productConnect = GetStates(); 
     //set_orienation = getOrient.getOrientation(); 
     return productConnect; 
    } 

    private String GetStates() { 
     // TODO Auto-generated method stub 
      // Hashmap for ListView 
     // Creating JSON Parser instance 

     if(litList == null) { System.out.println("back"); 
     JSONParser jParser = new JSONParser(LiteratureList.this); 
     try { 
      json_literature = jParser.getJsonFromUrl("http://tsubaki.usawebdept.com/?type=listOfLiterature"); 
      if(json_literature!= null) { 
       literature_list = json_literature.toString(); 
      } 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     } 
     return literature_list; 
    } 
    @SuppressLint("ShowToast") 
    public void onPostExecute(String result) { 
     System.out.println("result"); 
     if (result != "" && result != null) { 
      dialog.dismiss(); 

      litList = new ArrayList<HashMap<String,String>>(); 
       try { 
        // Getting Array of Contacts 
        us_literature_list = json_literature.getJSONArray("list"); 
        lit_url = json_literature.getString("siteUrl")+"/"; 

        // looping through All Contacts 
        System.out.println("Length"+us_literature_list.length()); 
        for(int i = 0; i < us_literature_list.length(); i++){ 
         JSONObject c = us_literature_list.getJSONObject(i); 
         // Storing each json item in variable 
         String name = c.getString(CATEGORY_NAME); 
         String image = c.getString(LARGE_IMAGE.replace(" ", "%20")); 
         String can_order = c.getString(CAN_ORDER); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 
         // adding each child node to HashMap key => value 
         map.put(CATEGORY_NAME, name); 
         map.put(LARGE_IMAGE, lit_url +"/"+ image.replace(" ", "%20")); 
         map.put(CAN_ORDER,can_order); 
           // adding HashList to ArrayList 
         litList.add(map); 

        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       System.out.println("List" +litList); 
       lit_home=(ListView) findViewById(R.id.lit_home); 
       lit_home.setScrollingCacheEnabled(true); 
       lit_home.setFastScrollEnabled(true); 
       literature_adapt=new LiteratureAdapter(LiteratureList.this, litList); 
       lit_home.setAdapter(literature_adapt); 

       OnItemClickListener listener = new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

        } 
       }; 
       lit_home.setOnItemClickListener(listener); 
    } else { 
     if(literature_list != null) { 
      Toast.makeText(LiteratureList.this, "No Data to Show!", 30).show(); 
     } else { 
      Toast.makeText(LiteratureList.this, "Server is not responding!", 30).show(); 
     } 
    } 
    } 

} 

// Мой Ленивый адаптер

 class LiteratureAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
LayoutInflater inflater=null; 
public ProductImageLoader imageLoader; 
String adapter_for; 
int loader1; 
ViewHolder viewHolder; 
public LiteratureAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    //get_orientation = orientation; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ProductImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return data.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 
public class ViewHolder { 
    TextView title; 
    CheckBox check_lit; 
    LinearLayout quantity_selection; 
    ImageView thumb_image; 
    HashMap<String, String> song; 
    String can_order; 
    EditText quantity_lit; 
    String quantity; 
    CheckBox cb; 
    // RadioButton cb; 
    } 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    viewHolder = new ViewHolder(); 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.literature_items_port, null); 
     viewHolder.quantity_lit = (EditText)vi.findViewById(R.id.quantity_lit); 
     viewHolder.quantity = viewHolder.quantity_lit.getText().toString(); 
     viewHolder.title = (TextView)vi.findViewById(R.id.catalog_name); // title 
     viewHolder.quantity_selection = (LinearLayout)vi.findViewById(R.id.quantity_selection); 
     viewHolder.check_lit = (CheckBox)vi.findViewById(R.id.check_lit); 
     viewHolder.thumb_image=(ImageView)vi.findViewById(R.id.literature_image); // thumb image 

     //ScrollView cat_scroll_list = (ScrollView)vi.findViewById(R.id.cat_scroll_list); 
     viewHolder.song = new HashMap<String, String>(); 
     viewHolder.song = data.get(position); 
     //data.add(viewHolder.song); 
     viewHolder.title.setText(viewHolder.song.get(LiteratureList.CATEGORY_NAME)); 
     imageLoader.DisplayImage(viewHolder.song.get(LiteratureList.LARGE_IMAGE),loader1, viewHolder.thumb_image); 
     viewHolder.thumb_image.setScaleType(ScaleType.FIT_XY); 
     vi.setTag(viewHolder); 

     viewHolder.check_lit 
     .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
       Boolean flag = isChecked;  
       viewHolder.cb = (CheckBox) buttonView; 
       if(viewHolder.cb.isChecked()){  
        //viewHolder.check_lit.setChecked(viewHolder.song.get(position));///move to here 
        System.out.println("Position"+literature_adapt.getItem(position)); 
        System.out.println("Text"+ viewHolder.title.getText()); 
        //System.out.println("Image"+ viewHolder.thumb_image.toString()); 
        //System.out.println("Order"+ viewHolder.song.get(LiteratureList.CAN_ORDER)); 
         //Toast.makeText(context, "Marked as Favorite Game!", 1).show();     
       } 
      } 
     }); 
    return vi; 
} 
} 
+0

1-й, вы не обновляете представление, если convertView не равно null, 2-ое нужно сохранить позицию, чтобы сохранить состояние. – Atrix1987

+0

@atrix может указать, как достичь состояния проверенной позиции ... – user1048958

+0

опубликовал какой-то соответствующий код – Atrix1987

ответ

0

и фиксированный адаптер факторизуется Заново, это должно сделать трюк, вы, возможно, потребуется внести некоторые изменения

class LiteratureAdapter extends BaseAdapter { 

    private Activity activity; 
    private ArrayList<HashMap<String, String>> data; 
    LayoutInflater inflater=null; 
    public ProductImageLoader imageLoader; 
    String adapter_for; 
    int loader1; 
    int selected = -1; // by default nothing is selected 

    public LiteratureAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
     activity = a; 
     data=d; 
     //get_orientation = orientation; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ProductImageLoader(activity.getApplicationContext()); 
    } 

    public int getCount() { 
     if(null == data){ 
      return 0; 
     }else{ 
      return data.size(); 
     } 
    } 

    public HashMap<String, String> getItem(int position) { 
     if(null == data){ 
      return null; 
     }else{ 
      return data.get(position); 
     } 
    } 

    public long getItemId(int position) { 
     return position; 
    } 
    public class ViewHolder { 
     TextView title; 
     CheckBox check_lit; 
     LinearLayout quantity_selection; 
     ImageView thumb_image; 
     HashMap<String, String> song; 
     String can_order; 
     EditText quantity_lit; 
     String quantity; 
     CheckBox cb; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder = null; 

     if(convertView==null){ 
      viewHolder = new ViewHolder(); 

      convertView = inflater.inflate(R.layout.literature_items_port, null); 
      viewHolder.quantity_lit = (EditText)convertView.findViewById(R.id.quantity_lit); 

      viewHolder.title = (TextView)convertView.findViewById(R.id.catalog_name); // title 
      viewHolder.quantity_selection = (LinearLayout)convertView.findViewById(R.id.quantity_selection); 
      viewHolder.check_lit = (CheckBox)convertView.findViewById(R.id.check_lit); 
      viewHolder.thumb_image=(ImageView)convertView.findViewById(R.id.literature_image); // thumb image 

      //ScrollView cat_scroll_list = (ScrollView)convertView.findViewById(R.id.cat_scroll_list); 
      viewHolder.song = new HashMap<String, String>(); 
      viewHolder.check_lit.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {  

        if(isChecked){      
         String sPos = (String)buttonView.getTag(); 
         int iPos = Integer.parseInt(pos); 
         if(selected != iPos){ 
          selected = iPos; 
          //new Item got selected do your work here 
          Toast.makeText(a.getApplicationContext(), "User selected: "+ iPos, Toast.LENGTH_LONG).show(); 
          LiteratureAdapter.this.notifyDataSetChanged(); 
         } 
        } 
       } 
      }); 
      convertView.setTag(viewHolder); 

     }else{ 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     //retain the checked state 
     if(position == selected){ 
      viewHolder.check_lit.setChecked(true); 
     }else{ 
      viewHolder.check_lit.setChecked(false); //needs to be reset 
     } 

     viewHolder.check_lit.setTag(""+position); 

     viewHolder.song = getItem(position); 

     viewHolder.title.setText(viewHolder.song.get(LiteratureList.CATEGORY_NAME)); 
     imageLoader.DisplayImage(viewHolder.song.get(LiteratureList.LARGE_IMAGE),loader1, viewHolder.thumb_image); 
     viewHolder.thumb_image.setScaleType(ScaleType.FIT_XY); 

     return convertView; 
    } 
} 

я в основном сохраняя последней проверенной позиции, а также проверить то же самое в getView, чтобы соответственно обновить флажок.

+0

Thanx много человек ... вряд ли это одно, чтобы это сделать ... другое дело, когда я выбираю первую проверку box, все нечетные флажки выбраны, и если я выбрал второй флажок, то даже если флажок установлен, будет выбрана любая догадка о том, что здесь происходит .... – user1048958

+0

да только что отредактировал код, проверьте его, пропустили для сброса состояния: 'viewHolder.check_lit .setChecked (ложь); ' – Atrix1987

Смежные вопросы