2016-05-07 151 views
0

在列表视图中,每行都有10个按钮。当按下这些按钮中的任何一个时,按钮的颜色应该改变(就像根据按下的位置填充条)。 这是我到目前为止所做的: 我已经将每个按钮的引用添加到一个称为按钮的ArrayList。 另外,我有一个具有颜色字符串的ArrayList。 这是分配给每个按钮的点击侦听器。Android:按下按钮时改变列表视图中所有按钮的颜色

这是我的适配器类的listview完整的代码形式。

public class TeacherRatingAdapter extends ArrayAdapter<Votes> { 

    private ArrayList<String> colors = new ArrayList(); 

    private ArrayList<Button> buttons = new ArrayList<>(); 
    private LayoutInflater inflater; 
    private ArrayList<Votes> mItems = new ArrayList<>(); 
    private ArrayList<Votes> mItemsTemp = new ArrayList<>(); 
    private int teacher; 
    private boolean myTeacher; 
    private ArrayList<Pair<Integer, Integer>> questionHint = new ArrayList<>(); 
    private static int givenMark; 
    private HashMap<String, Integer> givenMarks = new HashMap<>(); 
    ViewHolder viewHolder; 

    public TeacherRatingAdapter(Context context, TeacherRating teacherRating) { 
     super(context, -1, teacherRating.getVotes()); 
     mItems = teacherRating.getVotes(); 
     if(mItems.size()==0){ 
      for(int i = 0; i<10; i++){ 
       mItems.add(new Votes()); 
      } 
     } 
     for(int i = 0; i<teacherRating.getVotes().size(); i++){ 
      givenMarks.put(String.valueOf(i+1), teacherRating.getVotes().get(i).getAll().get(i)); 
     } 
     teacher = teacherRating.getTeacher(); 
     myTeacher = teacherRating.isMy_teacher(); 

     questionHint.add(new Pair<>(R.string.question1, R.string.questionHint1)); 
     questionHint.add(new Pair<>(R.string.question2, R.string.questionHint2)); 
     questionHint.add(new Pair<>(R.string.question3, R.string.questionHint3)); 
     questionHint.add(new Pair<>(R.string.question4, R.string.questionHint4)); 
     questionHint.add(new Pair<>(R.string.question5, R.string.questionHint5)); 
     questionHint.add(new Pair<>(R.string.question6, R.string.questionHint6)); 
     questionHint.add(new Pair<>(R.string.question7, R.string.questionHint7)); 
     questionHint.add(new Pair<>(R.string.question8, R.string.questionHint8)); 
     questionHint.add(new Pair<>(R.string.question9, R.string.questionHint9)); 
     questionHint.add(new Pair<>(R.string.question10, R.string.questionHint10)); 

     colors.add("#E77272"); 
     colors.add("#E77D72"); 
     colors.add("#E78D72"); 
     colors.add("#E7A472"); 
     colors.add("#E8B472"); 
     colors.add("#E8C272"); 
     colors.add("#E8C272"); 
     colors.add("#E6E773"); 
     colors.add("#c3e874"); 
     colors.add("#89e874"); 
    } 

    @Override 
    public int getCount() { 
     return mItems.size() > 0 ? mItems.size() : 1; 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     return mItems.size() != 0; 
    } 

    View.OnClickListener clickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Button button = (Button) v; 
      String text = button.getText().toString(); 
      if(text.equals("1")){ 
       givenMark = 1; 
      }else if(text.equals("2")){ 
       givenMark = 2; 
      }else if(text.equals("3")){ 
       givenMark = 3; 
      }else if(text.equals("4")){ 
       givenMark = 4; 
      }else if(text.equals("5")){ 
       givenMark = 5; 
      }else if(text.equals("6")){ 
       givenMark = 6; 
      }else if(text.equals("7")){ 
       givenMark = 7; 
      }else if(text.equals("8")){ 
       givenMark = 8; 
      }else if(text.equals("9")){ 
       givenMark = 9; 
      }else if(text.equals("10")){ 
       givenMark = 10; 
      } 

      colorButton(givenMark, viewHolder); 
//   button.setBackgroundColor(Color.parseColor(colors.get(givenMark))); 
      mItems.get(Integer.valueOf(button.getTag().toString())).addOne(Integer.valueOf(text)); 
//   mItems.get(Integer.valueOf(button.getTag().toString())).setScore(Integer.valueOf(text), givenMark); 
//   givenMarks.put(button.getTag().toString(), givenMark); 
      notifyDataSetChanged(); 
     } 
    }; 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     inflater = LayoutInflater.from(getContext()); 
     if (mItems.size() == 0) { 
      if (!Common.isNetworkConnected(getContext())) { 
       convertView = inflater.inflate(R.layout.list_item_no_internet, null, false); 
      } else { 
       convertView = inflater.inflate(R.layout.list_item_no_content, null, false); 
      } 
      return convertView; 
     } else { 
      if (convertView == null) { 
       buttons.clear(); 
       convertView = inflater.inflate(R.layout.list_item_teacher_rating, parent, false); 
       viewHolder = new ViewHolder(); 
       viewHolder.mQuestionTextView = (TextView) convertView.findViewById(R.id.question); 
       viewHolder.mHintTextView = (TextView) convertView.findViewById(R.id.question_hint); 
       viewHolder.button1 = (Button) convertView.findViewById(R.id.question_button_1); 
       viewHolder.button2 = (Button) convertView.findViewById(R.id.question_button_2); 
       viewHolder.button3 = (Button) convertView.findViewById(R.id.question_button_3); 
       viewHolder.button4 = (Button) convertView.findViewById(R.id.question_button_4); 
       viewHolder.button5 = (Button) convertView.findViewById(R.id.question_button_5); 
       viewHolder.button6 = (Button) convertView.findViewById(R.id.question_button_6); 
       viewHolder.button7 = (Button) convertView.findViewById(R.id.question_button_7); 
       viewHolder.button8 = (Button) convertView.findViewById(R.id.question_button_8); 
       viewHolder.button9 = (Button) convertView.findViewById(R.id.question_button_9); 
       viewHolder.button10 = (Button) convertView.findViewById(R.id.question_button_10); 

       viewHolder.button1.setOnClickListener(clickListener); 
       viewHolder.button2.setOnClickListener(clickListener); 
       viewHolder.button3.setOnClickListener(clickListener); 
       viewHolder.button4.setOnClickListener(clickListener); 
       viewHolder.button5.setOnClickListener(clickListener); 
       viewHolder.button6.setOnClickListener(clickListener); 
       viewHolder.button7.setOnClickListener(clickListener); 
       viewHolder.button8.setOnClickListener(clickListener); 
       viewHolder.button9.setOnClickListener(clickListener); 
       viewHolder.button1.setOnClickListener(clickListener); 

       viewHolder.button1.setTag(position); 
       viewHolder.button2.setTag(position); 
       viewHolder.button3.setTag(position); 
       viewHolder.button4.setTag(position); 
       viewHolder.button5.setTag(position); 
       viewHolder.button6.setTag(position); 
       viewHolder.button7.setTag(position); 
       viewHolder.button8.setTag(position); 
       viewHolder.button9.setTag(position); 
       viewHolder.button1.setTag(position); 

       buttons.add(viewHolder.button1); 
       buttons.add(viewHolder.button2); 
       buttons.add(viewHolder.button3); 
       buttons.add(viewHolder.button4); 
       buttons.add(viewHolder.button5); 
       buttons.add(viewHolder.button6); 
       buttons.add(viewHolder.button7); 
       buttons.add(viewHolder.button8); 
       buttons.add(viewHolder.button9); 
       buttons.add(viewHolder.button10); 

       convertView.setTag(viewHolder); 
      } else { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 
      viewHolder.mQuestionTextView.setText(questionHint.get(position).getValue0()); 
      viewHolder.mHintTextView.setText(questionHint.get(position).getValue1()); 
      Votes item = getItem(position); 

      int count = 0; 
      double score = 0; 
      for(int i = 0; i<item.getAll().size(); i++){ 
       score += (i+1) * item.getAll().get(i); 
       count +=item.getAll().get(i); 
      } 
      if(count>0){ 
       score = score/count; 
      } 
      if(score==0){ 
       score = 10; 
      } 
//   double diff = (10-Math.round(score)); 
      colorButton(Math.round(score), viewHolder); 
//   colorButton((int) score); 
//   for (int j = 9; j >= diff; j--) { 
//    Button button = buttons.get(j); 
//    button.setBackgroundColor(Color.WHITE); 
//    button.setTextColor(Color.BLACK); 
//   } 
     } 
     return convertView; 
    } 

    private void colorButton(long givenMark, ViewHolder viewHolder){ 
     for(int i=0; i<buttons.size();i++){ 
      buttons.get(i).setBackgroundColor(Color.WHITE); 
     } 
     for (int j = 0; j <= givenMark; j++) { 
      Button button = buttons.get(j); 
      button.setBackgroundColor(Color.parseColor(colors.get(j))); 
     } 
    } 

    private static class ViewHolder { 
     TextView mQuestionTextView; 
     TextView mHintTextView; 
     Button button1; 
     Button button2; 
     Button button3; 
     Button button4; 
     Button button5; 
     Button button6; 
     Button button7; 
     Button button8; 
     Button button9; 
     Button button10; 
    } 
} 

它看起来像这样: enter image description here 所以,当我按下按钮3,超越3所有的颜色,必须成为白色。或者当我按下按钮9时,所有的按钮必须有它的颜色,并且它前面的按钮必须是白色的。但是这不会发生,并且没有错误。 谢谢你的帮助。

+0

你能用水平滚动视图中的10个简单按钮来做到吗?如果你的视图在你的代码中只修复了 –

+0

有什么问题? – sushildlh

+0

是否有任何错误? – sushildlh

回答

0

是不是那个评级吧?

OnClickListener错误,我的意思不是正确的听众,你有错的想法。封闭视图是什么?

+0

是的,我想做一个评级栏。不清楚您的机箱视图是什么意思。但是这些是位于litsview项目上的10个按钮。我使用ListFragment。 – Sermilion

相关问题