我有一個列表視圖與每行上的圖像現在我想要的是我想改變該圖像onclick,現在如果它是兩個圖像,它會很簡單。我可以使用布爾值並設置項目圖像的位置進行更改。 但我的案件涉及兩個以上的圖像 1日點擊圖像更改爲image0 月2點擊圖像更改爲image1的 3日點擊圖像更改爲鏡像2 和4日點擊圖片變回圖像 和圖像的切換相當優良但一旦重新加載列表時,所有更改都會隨着切換的圖像位置從0更改爲8等等。我嘗試設置默認行爲。 所以,這裏是我的示例代碼我怎麼能切換超過三個圖像在列表視圖android
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null){
/********** Inflate tabitem.xml file for each row (Defined below) ************/
vi = inflater.inflate(R.layout.tabitem, null);
/******** View Holder Object to contain tabitem.xml file elements ************/
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.text);
holder.text1=(TextView)vi.findViewById(R.id.text1);
holder.image=(ImageView)vi.findViewById(R.id.image);
holder.image.setOnClickListener(this);
holder.image.setTag(position);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
if(data.size()<=0)
{
holder.text.setText("No Data");
}
else
{
/***** Get each Model object from Arraylist ********/
tempValues = (ListModel) data.get(position);
Log.i("Mainly at", Integer.toString(position)+"state is "+tempValues.getStatus());
/************ Set Model values in Holder elements ***********/
holder.text.setText(tempValues.getCompanyName());
holder.text1.setText(tempValues.getUrl());
// holder.image.setImageResource(R.drawable.image0);
if(tempValues.getStatus().equals(ListModel.imageStateNone))
{
holder.image.setImageResource(R.drawable.image0);
}
if(tempValues.getStatus().equals(ListModel.imageStateAnotherCase))
{
if(tempValues.getImageStateAtPos()==0){
holder.image.setImageResource(R.drawable.image0);// or what it should be in default
}
if(tempValues.getImageStateAtPos()==1){
holder.image.setImageResource(R.drawable.plus);// or what it should be in default
}
if(tempValues.getImageStateAtPos()==2){
holder.image.setImageResource(R.drawable.minus);// or what it should be in default
}
}
/******** Set Item Click Listner for LayoutInflater for each row ***********/
// vi.setOnClickListener(new OnItemClickListener(position));
}
return vi;
}
@Override
public void onClick(View v) {
int position = (Integer)v.getTag();
tempValues.setStateAsChange();
Log.e("clicked at", Integer.toString(tempValues.getImageStateAtPos())+"Changed state is "+tempValues.getStatus()+"And position"+Integer.toString(position));
tempValues.setImageStateAtPos(tempValues.getImageStateAtPos()+1);
if(tempValues.getImageStateAtPos()>2){
tempValues.setImageStateAtPos(0);
}
// holder.image.setImageResource(R.drawable.plus);
LinearLayout rl = (LinearLayout)v.getParent();
holder.image = (ImageView)rl.getChildAt(0);
// ((ImageView) v).setImageResource(R.drawable.plus);
if(tempValues.getImageStateAtPos()==0){
holder.image.setImageResource(R.drawable.image0);// or what it should be in default
}
if(tempValues.getImageStateAtPos()==1){
holder.image.setImageResource(R.drawable.plus);// or what it should be in default
}
if(tempValues.getImageStateAtPos()==2){
holder.image.setImageResource(R.drawable.minus);// or what it should
}
if(tempValues.getImageStateAtPos()==3){
holder.image.setImageResource(R.drawable.image10);
}
}
}
ListModel的代碼是在這裏 私人字符串狀態= 「」;
public static final String imageStateNone="none";
public static final String imageStateAnotherCase="changed";
private int state;
/****
HashMap<Integer, String> set=new HashMap<Integer, String>();
public void setStateAsnone(int pos)
{
set.put(pos,imageStateNone);
}
public void setStateAsChange(int pos)
{
set.put(pos, imageStateAnotherCase);
//this.status = imageStateAnotherCase;
}
public String getStatus(int pos)
{
return set.get(pos);
}
public void setImageStateAtPos(int state){
this.state=state;
}
public int getImageStateAtPos(){
return state;
}
public void setStateAsnone()
{
this.status = imageStateNone;
}
public void setStateAsChange()
{
this.status = imageStateAnotherCase;
}
public String getStatus()
{
return status;
}
終於在mainactivity添加數據
for (int i = 0; i < 11; i++) {
final ListModel sched = new ListModel();
/******* Firstly take data in model object ******/
sched.setCompanyName("Company "+i);
sched.setImage("image"+i);
sched.setUrl("http:\\\\www."+i+".com");
sched.setImageStateAtPos(0);
sched.setStateAsnone();
/******** Take Model Object in ArrayList **********/
CustomListViewValuesArr.add(sched);
}
enter code here
一切正常般的魅力,直到列表重新加載一切都被搞砸名單時使用重載使用hashmap.Just想現在如何知道狀態位置指示器嘗試我可以停止改變listview重新加載時切換圖像的位置。 幫幫忙。
檢查我剛剛發佈了答案初始化它,希望它有助於 –
@HassaanRabbani不需要這樣的評論。他會爲每個新帖發送一個通知,所以不需要做一個「看看」的評論讓他知道兩次...... – WarrenFaith