1

我有一个带有 3 个文本视图和 5 个图像视图(星号)的自定义列表视图。前两个文本视图是可见的,第三个是不可见的。我正在从服务器获取数据并放入列表视图中,无论多少。

我想要的是

如果我点击任何星星(1 或 2 或 3 或 4 或 5),我想从隐藏的 textview 中获取 id。和star imageview 在点击它后会改变他们的图像。假设我点击第三颗星,那么 3 星将被评分,其他星将不评分。

我做了什么

现在我能够从服务器获取数据并将其放入列表视图中,但假设我单击任何项​​目的星标,然后最后一个项目的星标会更改其图像而不是单击的项目。它从隐藏的文本视图中获取最后一个 ID。

这是我的代码。

public class MyArrayAdapter extends ArrayAdapter<Student> {
StudentWrapper StudentWrapper = null;
Context context;
int layoutResourceId;
Student student;
ArrayList<Student> students = new ArrayList<Student>();

 public MyArrayAdapter(Context context, int layoutResourceId,ArrayList<Student> studs)   {
    super(context, layoutResourceId, studs);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.students = studs;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View item = convertView;



    if (item == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        item = inflater.inflate(layoutResourceId, parent, false);
        StudentWrapper = new StudentWrapper();
        StudentWrapper.menuname = (TextView) item.findViewById(R.id.title);
        StudentWrapper.hotelname = (TextView) item.findViewById(R.id.artist);   
        StudentWrapper.menuid = (TextView) item.findViewById(R.id.tvhotelid);   
        StudentWrapper.firstStar = (ImageView)item.findViewById(R.id.hotelListFirstStar);
        StudentWrapper.secondStar = (ImageView)item.findViewById(R.id.hotelListSecondStar);
        StudentWrapper.thirdStar = (ImageView)item.findViewById(R.id.hotelListThirdStar);
        StudentWrapper.fourthStar = (ImageView)item.findViewById(R.id.hotelListFourthStar);
        StudentWrapper.fifthStar = (ImageView)item.findViewById(R.id.hotelListFifthStar);
        StudentWrapper.firstStar.setFocusable(false);
        StudentWrapper.secondStar.setFocusable(false);
        StudentWrapper.thirdStar.setFocusable(false);
        StudentWrapper.fourthStar.setFocusable(false);
        StudentWrapper.fifthStar.setFocusable(false);
        item.setTag(StudentWrapper);
    } else {
        StudentWrapper = (StudentWrapper) item.getTag();
    }

    student = students.get(position);
    StudentWrapper.menuname.setText(student.getMenuName());
    StudentWrapper.hotelname.setText(student.gethotenName());
    StudentWrapper.menuid.setText(String.valueOf(student.getMenuId()));

    StudentWrapper.fifthStar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(context, "Edit", Toast.LENGTH_LONG).show();
            StudentWrapper.firstStar.setImageResource(R.drawable.rated);
            StudentWrapper.secondStar.setImageResource(R.drawable.rated);
            StudentWrapper.thirdStar.setImageResource(R.drawable.rated);
            StudentWrapper.fourthStar.setImageResource(R.drawable.rated);
            StudentWrapper.fifthStar.setImageResource(R.drawable.rated);
        }
    });

    StudentWrapper.secondStar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            StudentWrapper.firstStar.setImageResource(R.drawable.rated);
            StudentWrapper.secondStar.setImageResource(R.drawable.rated);
            StudentWrapper.thirdStar.setImageResource(R.drawable.unrated);
            StudentWrapper.fourthStar.setImageResource(R.drawable.unrated);
            StudentWrapper.fifthStar.setImageResource(R.drawable.unrated);
            Toast.makeText(context, "Delete"+student.getMenuId(), Toast.LENGTH_LONG).show();
        }
    });
    StudentWrapper.firstStar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            StudentWrapper.firstStar.setImageResource(R.drawable.rated);
            StudentWrapper.secondStar.setImageResource(R.drawable.unrated);
            StudentWrapper.thirdStar.setImageResource(R.drawable.unrated);
            StudentWrapper.fourthStar.setImageResource(R.drawable.unrated);
            StudentWrapper.fifthStar.setImageResource(R.drawable.unrated);
            Toast.makeText(context, "Delete"+student.getMenuId(), Toast.LENGTH_LONG).show();
        }
    });
    StudentWrapper.fourthStar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                 StudentWrapper.firstStar.setImageResource(R.drawable.rated);
            StudentWrapper.secondStar.setImageResource(R.drawable.rated);
            StudentWrapper.thirdStar.setImageResource(R.drawable.rated);
            StudentWrapper.fourthStar.setImageResource(R.drawable.rated);
            StudentWrapper.fifthStar.setImageResource(R.drawable.unrated);
            Toast.makeText(context, "Delete"+student.getMenuId(), Toast.LENGTH_LONG).show();
        }
    });
    StudentWrapper.thirdStar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                   StudentWrapper.firstStar.setImageResource(R.drawable.rated);
            StudentWrapper.secondStar.setImageResource(R.drawable.rated);
            StudentWrapper.thirdStar.setImageResource(R.drawable.rated);
            StudentWrapper.fourthStar.setImageResource(R.drawable.unrated);
            StudentWrapper.fifthStar.setImageResource(R.drawable.unrated);
            Toast.makeText(context, "Delete"+student.getMenuId(), Toast.LENGTH_LONG).show();
        }
    });

    return item;

}

static class StudentWrapper {
    TextView menuid;
    TextView menuname;
    TextView hotelname;
    ImageView firstStar;
    ImageView secondStar;
    ImageView thirdStar;
    ImageView fourthStar;
    ImageView fifthStar;
}

}

如果我单击任何项​​目的任何星,那么它会反映最后一个项目。我想更改该项目的图像视图并希望从该项目的文本视图中获取文本。
请给我任何提示或参考

4

2 回答 2

1

我在存在列表视图的 Activity 中执行此操作,而不是在 customadapter 中。

    adapterListview = new ListArrayAdapter(this, items);
    this.listview.setAdapter(adapterListview);

    listview.setOnItemClickListener(new OnItemClickListener() {

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

            // global variable
            idItem = (int) id;

            switch (idItem) {

            case 0:
               // set your text and image for this item
            break;

            case 1:
               // set your text and image for this item

            break;

            case 2:
               // set your text and image for this item

            break;

            case 3:
               // set your text and image for this item

            break;
         }
       }
     });

id=0 是第一颗星,id=1 是第二颗星,依此类推...

于 2013-08-28T11:19:34.057 回答
0

可能是您的 ListView 正在接受触摸事件并正在转移到每个孩子。因此,所有开始都突出显示

于 2013-08-27T11:08:25.093 回答