【问题标题】:How to prepare Adapter For Showing ImageView Instead TextView upon need如何根据需要准备适配器以显示 ImageView 而不是 TextView
【发布时间】:2014-07-05 15:12:10
【问题描述】:

我的聊天应用程序有一个 ListView,有时我需要删除 TextView 并根据数据输入加载图像,以实现我有一些想法并且我已经尝试过,但是当我添加时 listview 搞砸了图像,无论如何,认为可能是可以使用一些好人的一些经验请关于这样做的正确方法是什么?我认为他们的方式是:

1.创建2个ViewHolders和ConvertViews set,每次加载1个

2.将 listView 中的 imageView 设置为 Invisible ,并在需要时可见(这个我试过但失败了,就像说的那样)

如果你能给我一个提示或帮助,我真的很感激,非常感谢

我已经尝试过的一部分:

     @Override
 public int getCount() {
return mCursor.getCount();
}

@Override
public Object getItem(int position) {
return mCursor.getString(position);
}

@Override
public long getItemId(int position) {
return mCursor.getPosition();
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
    holder = new ViewHolder();
    convertView = mLayoutInflater.inflate(R.layout.listitem_discuss, null);
    this.convertview=convertView;



System.out.println("ConverView null");

holder.PimageView = (ImageView)convertView.findViewById(R.id.PimageView);
//PimageView is the One i have Problem With, it gets Visible When Inputs are Images
holder.wrapper = (LinearLayout) convertView.findViewById(R.id.wrapper);
//wrapper is my LinearLayout child of FrameLayout
holder.theMessage = (TextView) convertView.findViewById(R.id.comment);
holder.theName = (TextView) convertView.findViewById(R.id.MSGname);
holder.theImage = (ImageView)convertView.findViewById(R.id.MSGimage);
holder.lp = (FrameLayout.LayoutParams) holder.theName.getLayoutParams();
holder.paramsleft = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,Gravity.LEFT);
holder.paramsright = new   FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,Gravity.RIGHT);

convertView.setTag(holder);

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

mCursor.moveToPosition(position);   
String imagenamer= 
(mCursor.getString(mCursor.getColumnIndex("username")).split("\\@"))[0];
int isright= Integer.valueOf(mCursor.getString(mCursor.getColumnIndex("isright")));



if(!"".equals(mCursor.getString(mCursor.getColumnIndex("isfile")))){
 System.out.println("its a file");
String type=(mCursor.getString(mCursor.getColumnIndex("isfile")).split("\\@ADAT")
[0]);
System.out.println("Type:"+type);
switch (type) {
case "image":
        //theMessage is replaced with PimageView and so TheView
        holder.theMessage.setVisibility(View.GONE);
        holder.PimageView.setVisibility(View.VISIBLE);  
        System.out.println("its an image");
        holder.PimageView.setLayoutParams(new   
LinearLayout.LayoutParams(PViewWidth,LayoutParams.WRAP_CONTENT));
if(isright==0){
holder.PimageView.setBackgroundResource(R.drawable.bubble_yellow);

}else{
holder.PimageView.setBackgroundResource(R.drawable.bubble_yellow);

 }

但 ListView 在滚动时会弄乱位置

【问题讨论】:

    标签: android listview android-listview adapter


    【解决方案1】:

    你有两个选择。一是走可见/不可见的路线。如果你走这条路,你必须在每次调用 getView() 时使正确的视图可见和不可见,并且你的 getView 需要知道要使用哪一个。

    选项二是基于适配器的完全自定义适配器。具体来说,除了普通函数之外,您还需要重载 getViewTypeCount() 和 getItemViewType()。对于这样一个简单的视图,我可能会选择路线 1,这个选项更适合复杂的视图。

    【讨论】:

    • 好吧,我第一个做了,看看请我添加代码
    • 您确实需要格式化该代码。但是我看不到你在文本的情况下设置正确的可见性。您需要在两者上都设置它们。除此之外,告诉我你遇到了什么问题。
    • imageView 在 xml 中已经“消失”了,这就是为什么,这只是其中的一部分,因为我有 8 个这样的条件,问题是例如我应该有 2 个图像我的列表,我有 4 个,每当我向上和向下滚动时,它会变得更加混乱,导致所有 textview 都被删除并且 imageViews 取而代之
    • 不管它是否在 xml 中消失。滚动时,视图会被回收。您必须在每次调用时设置 EVERY 字段的 EVERY 设置才能查看 - 这意味着所有文本、所有图像和所有可见性。
    • 这不是确切的原因或解决方案,但它帮助我解决了更多的回收问题,所以我接受这个答案
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多