【问题标题】:how to insert an image into a listview?如何将图像插入列表视图?
【发布时间】:2014-09-04 19:30:13
【问题描述】:

我想在列表视图中每个项目的右侧插入一个小图像 基本上,只要用户单击列表视图中的某个项目,我的应用程序就应该这样做,图像变得可见,否则它必须保持不可见。

下面是我的 XML 活动

活动

public class EpisodiActivity extends Activity {

public class ViewModel {
    private String url;
    private String name;

    public ViewModel(String url, String name) {
        this.url = url;
        this.name = name;
    }

    public String getUrl() {
        return this.url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return this.name;
    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //creazione fullscreen activity
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.episodi_activity);

    String[] episodi = getIntent().getStringArrayExtra("Product");
    String[] urls = getIntent().getStringArrayExtra("urls");

    ListView mylist = (ListView) findViewById(R.id.listView1);


    // And in this loop we create the ViewModel instances from 
    // the name and url and add them all to a List
    List<ViewModel> models = new ArrayList<ViewModel>();
    for (int i = 0; i < episodi.length; i++) {
        String name = episodi[i];
        String url = "No value";
        if (i < urls.length) {
            url = urls[i];
        }
        ViewModel model = new ViewModel(url, name);
        models.add(model);
    }


    // Here we create the ArrayAdapter and assign it to the ListView
    // We pass the List of ViewModel instances into the ArrayAdapter
    final ArrayAdapter<ViewModel> adapter = new ArrayAdapter<ViewModel>(this, android.R.layout.simple_list_item_1, models);

    mylist.setAdapter(adapter);


    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

            // Here we get the ViewModel at the given position
            ViewModel model = (ViewModel) arg0.getItemAtPosition(position);

            // And the url from the ViewModel
            String url = model.getUrl();

            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
    });
}  

XML

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/pubblicita"
    android:cacheColorHint="#ffd700"
    android:background="@drawable/sfondobottone" />

【问题讨论】:

  • 看我的回答希望对你有帮助

标签: android image listview visible invisible


【解决方案1】:

我想你想在 listview 中得到这种输出

列表视图中带有图像的文本

您可以使用自定义列表视图。创建一个扩展 BaseAdapter 类的类

这是我正在使用的示例

你的 BaseAdapter

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

    public class FrontListBaseAdapter extends BaseAdapter {
     private static ArrayList<FrontDetails> itemDetailsrrayList;

     private LayoutInflater l_Inflater;

     public FrontListBaseAdapter(Context context, ArrayList<FrontDetails> results) {
      itemDetailsrrayList = results;
      l_Inflater = LayoutInflater.from(context);
     }

     public int getCount() {
      return itemDetailsrrayList.size();
     }

     public Object getItem(int position) {
      return itemDetailsrrayList.get(position);
     }

     public long getItemId(int position) {
      return position;
     }

      // get the views in frontview xml file where you have
      // define multiple views that will appear in listview each row
     public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      if (convertView == null) {
       convertView = l_Inflater.inflate(R.layout.frontview, null);
       holder = new ViewHolder();
       holder.Image = (ImageView) convertView.findViewById(R.id.adminpic1);
       holder.MsgType = (TextView) convertView.findViewById(R.id.msgtype1);

       convertView.setTag(holder);
      } else {
       holder = (ViewHolder) convertView.getTag();
      }


      holder.Image.setImageResource(R.drawable.mainlogo); // you can set your setter here
      holder.MsgType.setText(itemDetailsrrayList.get(position).getMsgType());

      return convertView;
     }

     // holder view for views
     static class ViewHolder {
      ImageView Image;
      TextView MsgType;
     }
    }

您将在其中创建 getter 和 setter 的 FrontDetails 类,该类将用于最终的 ArrayList resultse = new ArrayList();

import android.graphics.Bitmap;

public class FrontDetails {

    public int getImage() {
    return image;
    }
    public void setImage(int imageN) {
    this.image = imageN;
    }


    public String getMsgType() {
    return MsgType;
    }
    public void setMsgType(String text) {
    this.MsgType = text;
    }



    private int image;
    private String MsgType;

    }

您的 frontview.XML,您可以在其中放置多个视图,这些视图将位于每一行或您的布局中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="vertical"
    android:layout_margin="10dp" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp" >

        <ImageView
            android:id="@+id/adminpic1"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:src="@drawable/ic_launcher" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >



            <TextView
                android:id="@+id/msgtype1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:layout_marginTop="4dp"
                android:textSize="1sp"
                android:text="MsgType" />


        </LinearLayout>

    </LinearLayout>

</LinearLayout>

和你在 xml 中的列表视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/sync"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Sync" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp" >
    </ListView>

</LinearLayout>

现在在你的主要活动中

    final ArrayList<FrontDetails> resultse = new ArrayList<FrontDetails>();
FrontListBaseAdapter asdf = new FrontListBaseAdapter(context, resultse);
                lv1.setAdapter(new FrontListBaseAdapter(Front.this, resultse));


 lv1.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {

                    Object o = lv1.getItemAtPosition(position);
                    FrontDetails obj_itemDetails = (FrontDetails)o;
                    Toast.makeText(context, "You have chosen " + ' ' + obj_itemDetails.getMsgType(), Toast.LENGTH_LONG).show();

    }
        });

编辑: 从这里我学到了自定义列表视图,它是一个带有图像的简单示例

http://www.javasrilankansupport.com/2012/05/android-listview-example-with-image-and.html

http://www.javacodegeeks.com/2012/10/android-listview-example-with-image-and.html

【讨论】:

    【解决方案2】:

    通过 BaseAdapter 使用自定义列表视图

    你的适配器

    public class CustomBaseAdapter extends BaseAdapter {
    Context context;
    List<RowItem> rowItems;
    
    public CustomBaseAdapter(Context context, List<RowItem> items) {
        this.context = context;
        this.rowItems = items;
    }
    
    /*private view holder class*/
    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
        TextView txtDesc;
    }
    
    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_item, null);
            holder = new ViewHolder();
            holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
            holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
    
        RowItem rowItem = (RowItem) getItem(position);
    
        holder.txtDesc.setText(rowItem.getDesc());
        holder.txtTitle.setText(rowItem.getTitle());
        holder.imageView.setImageResource(rowItem.getImageId());
    
        return convertView;
    }
    
    @Override
    public int getCount() {    
        return rowItems.size();
    }
    
    @Override
    public Object getItem(int position) {
        return rowItems.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return rowItems.indexOf(getItem(position));
    }
    

    }

    你的 list_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    
    <ImageView
        android:id="@+id/icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:contentDescription="@string/image"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />
    
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/icon"
        android:paddingBottom="10dp"
        android:textColor="#CC0033"
        android:textSize="16dp" />
    
    <TextView
        android:id="@+id/desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:layout_toRightOf="@+id/icon"
        android:paddingLeft="10dp"
        android:textColor="#3399FF"
        android:textSize="14dp" />
    
    </RelativeLayout>
    

    你的单行项目类

    public class RowItem {
    private int imageId;
    private String title;
    private String desc;
    
    public RowItem(int imageId, String title, String desc) {
        this.imageId = imageId;
        this.title = title;
        this.desc = desc;
    }
    public int getImageId() {
        return imageId;
    }
    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Override
    public String toString() {
        return title + "\n" + desc;
    }  
    }
    

    列表视图实现

    listView = (ListView) findViewById(R.id.list);
        CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems);
        listView.setAdapter(adapter);
    

    【讨论】:

      【解决方案3】:

      我可以提供一些提示,但不幸的是无法通过示例帮助您..

      首先创建一个自定义适配器(扩展 BaseAdapter),然后创建一个自定义布局。 此处自定义布局在右侧包含 textview 和一个图像视图(默认不可见)。

      只需使用适配器自定义列表视图,然后通过 get view() 将文本放入 TextView 中。

      最后,在您的 listItemClickListener 中,使图像按其位置可见。

      【讨论】:

        【解决方案4】:

        你可以像这样在xml上设置

        android:visibility="visible" 
        

        android:visibility="invisible" 
        

        android:visibility="gone"
        

        Java 程序:

        ImageView imgView = (ImageView)findViewById(R.id.custom);
        

        像这样设置你的 ImageView

        imgView .setVisibility(View.VISIBLE);
        
        
        imgView .setVisibility(View.INVISIBLE);
        
        
        imgView .setVisibility(View.GONE);
        

        INVISIBLE 和 GONE 之间的区别。

        INVISIBLE - 小部件将不可见,但会显示小部件的空间。

        GONE - 空间和小部件都是不可见的。

        现在你可以挂上你的setOnItemClickListener()

        listview.setOnItemClickListener(new OnItemClickListener()
        {
         @Override 
         public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
         { 
            imgView .setVisibility(View.VISIBLE);
         }
        });
        

        【讨论】:

        • 我不明白为什么会有反对票,答案清楚地解释了如何制作图像视图 Invisible 并在列表视图项目上单击制作该图像视图 Visible
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多