[英]How to change the image of the clicked item in the listview
在我的應用程序中,我想更改用戶單擊的列表視圖中的imageview。開始時,我通過適配器類在列表視圖中傳遞圖像,但是單擊該項目后,我想稍后在列表視圖中更改圖像視圖中的圖像,如何更改特定位置的圖像?
主要活動
public class MainActivity extends Activity {
ListView listView;
public static int pos = 0;
String[] Prayers = new String[] { "REFLETINDO A IMAGEM DE CRISTO",
"PROVIDÊNCIA PARA TODOS OS CASOS", "A CRUZ REVELA O AMOR DE DEUS",
"REFLETINDO O AMOR DE CRISTO", "CRISTO CRUCIFICADO POR NÓS",
"AMOR IMENSURÁVEL", "DÁDIVA DO AMOR DE DEUS",
"NÃO PARA CONDENAR, MAS PARA SALVAR",
"O CENTRO DE MINHA ESPERANÇA",
};
String[] Dias = new String[] { "Dia1", "Dia2", "Dia3", "Dia4", "Dia5",
"Dia6", "Dia7", "Dia8", "Dia9", "Dia10", "Dia11", "Dia12",
"Dia13", "Dia14", "Dia15", "Dia16", "Dia17", "Dia18",
};
LinearLayout lay1 ,lay2;
int i=0;
int img ;
List<RowItem> rowItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
img = R.drawable.praying_hands_normal ;
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < 50; i++) {
RowItem item = new RowItem( Dias[i], Prayers[i],img);
rowItems.add(item);
}
listView = (ListView) findViewById(R.id.listview);
BaseClass adapter = new BaseClass(this, rowItems);
listView.setAdapter(adapter);
//listView.setOnItemClickListener(this);
// get the position of the clicked item
View t = null;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
pos = position;
//Toast.makeText(getApplication(), String.valueOf(pos), Toast.LENGTH_LONG).show();
Intent i = new Intent(MainActivity.this ,OpenActivity.class);
startActivity(i);
}
});
}
適配器類
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list, null);
holder = new ViewHolder();
holder.txtDias = (TextView) convertView.findViewById(R.id.dias);
holder.txtPrayers = (TextView) convertView
.findViewById(R.id.prayers);
holder.imageView = (ImageView) convertView
.findViewById(R.id.symbol);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
RowItem rowItem = (RowItem) getItem(position);
holder.txtPrayers.setText(rowItem.getDesc());
holder.txtDias.setText(rowItem.getTitle());
holder.imageView.setImageResource(R.drawable.praying_hands_normal);
if(pos == position && OpenActivity.a + OpenActivity.b +
OpenActivity.c == 1 || OpenActivity.a + OpenActivity.b +
OpenActivity.c == 2)
{
holder.imageView.setImageResource(R.drawable.praying_hands_bookmark);
}
else if(pos == position && OpenActivity.a + OpenActivity.b +
OpenActivity.c == 3 )
{
holder.imageView.setImageResource(R.drawable.praying_hands_selected);
}
return convertView;
}
onItemClick()方法中的參數具有“查看視圖”,而afaik是您按下的項目。 view.findViewById()專注於該行。
嘗試這個。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Add following to your listener
ImageView image = (ImageView) view.findViewById( R.id.item_image );
image.setBackground( getResources().getDrawable( R.drawable.new_item_image ));
// Or
Drawable img = ( Drawable ) getResources().getDrawable( R.drawable.new_item_image ));
image.setBackground( img );
}
});
編輯:當您從意圖中返回時,要保持項目更改,請嘗試此操作
在MainActivity中,添加一個View,Context和ImageView,
public class MainActivity extends Activity {
public View row;
public Context ctx;
public ImageView newImage;
// your code
在onItemClickListener中添加它,
row = view;
ctx = getBaseContext();
newImage = ( ImageView ) getResources().getDrawable( R.drawable.new_item_image ));
現在添加一個名為“ setImage”的新方法(在MainActivity類中),
public void setImage( View row ) {
ImageView item_image = ( ImageView ) row.findViewById( R.id.item_image );
item_image.setBackground( newImage );
}
當您退出新活動時,請先調用此功能,
MainActivity.setImage( MainActivity.row );
告訴我這是否有效,我自己還沒有嘗試過。
返回到Activity后刷新ListView,這一次,每個項目的getView()都會執行,但是RowItem
仍然保留舊的ImageId,這就是為什么上一個圖像可見的原因,只需在單擊項目時修改RowItem
的imageId即可:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
RowItem rowItem = rowItems.get(position);
rowItem.setImageId(R.drawable.new_item_image);
Intent i = new Intent(MainActivity.this ,OpenActivity.class);
startActivity(i);
}
--------------- 3小時后更新---------------
將BaseClass
保存在onCreate()方法之外,通知在onResume()處更改的數據集:
public class MainActivity extends Activity {
private BaseClass adapter;
protected void onCreate(Bundle savedInstanceState) {
...
adapter = new BaseClass(this, rowItems);
...
}
@Override
public void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
}
順便說一句,您也應該發布BaseClass
代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.