2015-06-01 5 views
0

Я сделал список из db, и я добавил onitemclicklistener. Когда я нажму на элемент, он переведет меня к следующему действию и покажет полную деталь элемента. Я также добавил флажок в списке, который проверяет элемент. Проблема в том, что когда я нажимаю на флажок, это не работает, но когда я нажимаю на элемент, он запускает следующее действие и после него, когда я возвращаюсь к списку и снова пытаюсь нажать на этот флажок, тогда этот элемент checkbox работает, а другой не работает. Также, когда я выбираю второй элемент из списка и возвращаюсь, тогда флажок работает. Флажок работает только с этим элементом, по крайней мере, одним кликом по времени. Кто-нибудь имеет представление о том, что может вызвать эту проблему? Вот мой Java:Флажок не работает должным образом в listview

public class DataListActivity extends Activity { 
    ListView listView; 
    SQLiteDatabase sqLiteDatabase; 
    FoodDbHelper foodDbHelper; 
    Cursor cursor; 
    ListDataAdapter listDataAdapter; 

    ListDataAdapter dataAdapter = null; 
    Button button; 
    DataProvider dataProvider; 





    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.data_list_layout); 





     checkButtonClick(); 






     listView = (ListView)findViewById(R.id.list_View); 
     listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.row_layout); 
     listView.setAdapter(listDataAdapter); 
     foodDbHelper = new FoodDbHelper(getApplicationContext()); 
     sqLiteDatabase = foodDbHelper.getReadableDatabase(); 
     cursor = foodDbHelper.getInformations(sqLiteDatabase); 
     if (cursor.moveToFirst()) 
     { 
      do { 
       String name,quantity,calorie,fat,protein,sugar,vitamins; 
       boolean selected = false; 
       String names = null; 

       name = cursor.getString(0); 
       quantity = cursor.getString(1); 
       calorie = cursor.getString(2); 
       fat = cursor.getString(3); 
       protein = cursor.getString(4); 
       sugar = cursor.getString(5); 
       vitamins = cursor.getString(6); 

       DataProvider dataProvider = new DataProvider(name,quantity,calorie,fat,protein,sugar,vitamins,names,selected); 

       listDataAdapter.add(dataProvider); 

      }while (cursor.moveToNext()); 
     } 


     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent,View view,int position, long id) { 

       String name = (String) ((TextView) view.findViewById(R.id.text_dish_name)).getText(); 
       String quantity = (String) ((TextView) view.findViewById(R.id.text_dish_quantity)).getText(); 
       String calorie = (String) ((TextView) view.findViewById(R.id.text_dish_calorie)).getText(); 
       String fat = (String) ((TextView) view.findViewById(R.id.text_dish_fat)).getText(); 
       String protein = (String) ((TextView) view.findViewById(R.id.text_dish_protein)).getText(); 
       String sugar = (String) ((TextView) view.findViewById(R.id.text_dish_sugar)).getText(); 
       String vitamins = (String) ((TextView) view.findViewById(R.id.text_dish_vitamins)).getText(); 

       String.valueOf(parent.getItemAtPosition(position)); 



       Toast.makeText(getApplicationContext(), 
         "dish name is : " + name, 
         Toast.LENGTH_SHORT).show(); 


     CheckBox names = (CheckBox) view.findViewById(R.id.checkBox1); 
       listView.setOnItemClickListener(this); 
        names.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

          CheckBox checkBox = (CheckBox) v; 

          DataProvider dataProvider = (DataProvider) checkBox.getTag(); 
          Toast.makeText(getApplicationContext(), 
            "Clicked on Checkbox: " + dataProvider.getName() + checkBox.getText() + 
              " is " + checkBox.isChecked(), 
            Toast.LENGTH_SHORT).show(); 
          dataProvider.setSelected(checkBox.isChecked()); 

         } 
        }); 





       Intent intent=new Intent(getApplicationContext(),Detail.class); 
       intent.putExtra("Dish name",name); 
       intent.putExtra("Dish quantity",quantity); 
       intent.putExtra("Dish calorie",calorie); 
       intent.putExtra("Dish fat",fat); 
       intent.putExtra("Dish protein",protein); 
       intent.putExtra("Dish sugar",sugar); 

       intent.putExtra("Dish vitamins",vitamins); 

       startActivity(intent); 

      } 


     });} 

     private void checkButtonClick() { 

      List list = new ArrayList(); 

      listDataAdapter = new ListDataAdapter(this, 
        R.layout.row_layout,list); 





      Button myButton = (Button) findViewById(R.id.findSelected); 
      myButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        StringBuffer responseText = new StringBuffer(); 
        responseText.append("The following dishes were selected...\n"); 




        ArrayList<DataProvider> list = (ArrayList<DataProvider>) listDataAdapter.list; 
        for(int i=0;i<list.size();i++) { 
         DataProvider dataProvider = list.get(i); 


         if (dataProvider.isSelected()) { 
          responseText.append("\n" + dataProvider.getName()+" : " + dataProvider.getCalorie()+" kcal"); 
         } 


        } 


        Toast.makeText(getApplicationContext(), 
          responseText, Toast.LENGTH_LONG).show(); 

       } 
      }); 


} 



} 
    public class DataProvider { 
    private String name = null; 
    private String quantity; 
    private String calorie; 
    private String fat; 
    private String protein; 
    private String sugar; 
    private String vitamins; 
    private String names = null; 
    boolean selected = false; 

    public String getName(){ 
     return name; 
    } 
    public void setName(String name){ 
     this.name = name; 
    } 

    public String getQuantity(){ 
     return quantity; 
    } 
    public void setQuantity(String quantity){ 
     this.quantity = quantity; 
    } 

    public String getCalorie(){ 
     return calorie; 
    } 
    public void setCalorie(String calorie){ 
     this.calorie = calorie; 
    } 
    public String getFat(){ 
     return fat; 
    } 
    public void setFat(String fat){ 
     this.fat = fat; 
    } 
    public String getProtein(){ 
     return protein; 
    } 
    public void setProtein(String protein){ 
     this.protein = protein; 
    } 
    public String getSugar() {return sugar; } 
    public void setSugar(String sugar) {this.sugar = sugar ;} 
    public String getVitamins() {return vitamins; } 
    public void setVitamins(String vitamins) {this.vitamins = vitamins ;} 

    public String getNames() {return names; } 
    public void setNames(String names) {this.names = names ;} 
    public boolean isSelected() 
    {return selected;} 
    public void setSelected(boolean selected) {this.selected = selected;} 


    public DataProvider(String name,String quantity,String calorie, String fat,String protein,String sugar,String vitamins,String names, boolean selected){ 
     this.name = name; 
     this.quantity = quantity; 
     this.calorie = calorie; 
     this.fat = fat; 
     this.protein = protein; 
     this.sugar = sugar; 
     this.vitamins = vitamins; 
     this.names = names; 
     this.selected = selected; 

    } 

    public void add(List list) { 

    } 
} 



    public class ListDataAdapter extends ArrayAdapter { 


    List list = new ArrayList(); 


    public ListDataAdapter(Context context, int resource) { 


     super(context, resource); 
    } 

    public ListDataAdapter(DataListActivity dataListActivity, int row_layout, List list) { 

     super(dataListActivity, row_layout, list); 
    } 


    static class LayoutHandler{ 
     TextView name,quantity,calorie,fat,protein,sugar,vitamins; 
     CheckBox names; 

    } 

    @Override 
    public void add(Object object) { 

     super.add(object); 
     list.add(object); 



    } 

    @Override 
    public int getCount() { 
     return list.size(); 


    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 


    } 

    @Override 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     LayoutHandler layoutHandler; 
     if (row == null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.row_layout,parent,false); 
      layoutHandler = new LayoutHandler(); 
      layoutHandler.name = (TextView)row.findViewById(R.id.text_dish_name); 
      layoutHandler.quantity = (TextView)row.findViewById(R.id.text_dish_quantity); 
      layoutHandler.calorie = (TextView)row.findViewById(R.id.text_dish_calorie); 
      layoutHandler.fat = (TextView)row.findViewById(R.id.text_dish_fat); 
      layoutHandler.protein = (TextView)row.findViewById(R.id.text_dish_protein); 
      layoutHandler.sugar = (TextView)row.findViewById(R.id.text_dish_sugar); 
      layoutHandler.vitamins = (TextView)row.findViewById(R.id.text_dish_vitamins); 
      layoutHandler.names = (CheckBox) row.findViewById(R.id.checkBox1); 

      row.setTag(layoutHandler); 


     } 
     else 
     { 
      layoutHandler = (LayoutHandler) row.getTag(); 

     } 
     DataProvider dataProvider = (DataProvider)this.getItem(position); 
     layoutHandler.name.setText(dataProvider.getName()); 
     layoutHandler.quantity.setText(dataProvider.getQuantity()); 
     layoutHandler.calorie.setText(dataProvider.getCalorie()); 
     layoutHandler.fat.setText(dataProvider.getFat()); 
     layoutHandler.protein.setText(dataProvider.getProtein()); 
     layoutHandler.sugar.setText(dataProvider.getSugar()); 
     layoutHandler.vitamins.setText(dataProvider.getVitamins()); 

     layoutHandler.names.setChecked(dataProvider.isSelected()); 
     layoutHandler.names.setTag(dataProvider); 



     return row; 
    } 




} 

Заранее спасибо

+0

Вы должны написать onclick on checkbox вместо wr на элементах списка. – Akash

+0

Отметьте мой ответ для [Одиночный выбор в RecyclerView] (http://stackoverflow.com/questions/28972049/single-selection-in-recyclerview/29030776#29030776) – Xcihnegn

ответ

0

Вам нужно сделать некоторые вещи:

Шаг 1:

нужно изменить GetView ..

Здесь только вам нужно добавить действие для флажка

пример:

layoutHandler.names.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

          CheckBox checkBox = (CheckBox) v; 

          DataProvider dataProvider = (DataProvider) checkBox.getTag(); 
          Toast.makeText(getApplicationContext(), 
            "Clicked on Checkbox: " + dataProvider.getName() + checkBox.getText() + 
              " is " + checkBox.isChecked(), 
            Toast.LENGTH_SHORT).show(); 
          dataProvider.setSelected(checkBox.isChecked()); 

         } 
        }); 

Шаг 2:

После того, как вы добавить CheckBox в ListView строке нажмите вопросы действий вызывает. Проблему можно решить, что это вам нужно, чтобы вызвать itemclick действие от метода GetView

пример:

//I am adding an extra widget 
layoutHandler.layout = (LinearLayout)row.findViewById(R.id.linear_layout); 

затем нажмите Действие

layoutHandler.layout.setOnclick..... 

Под этим спускового элемента действия мыши с помощью performItemClick

layoutHandler.layout.performItemClick(... 
+0

thnx все у меня проблема с решением –

+0

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

+0

Я не могу видеть код. В чем проблема? вы можете изменить свой вопрос – Amsheer

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