簡體   English   中英

如何在列表視圖中更改單擊的項目的圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM