Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android listviewitem在滚动后不可扩展地重新加载_Android_Listview - Fatal编程技术网

Android listviewitem在滚动后不可扩展地重新加载

Android listviewitem在滚动后不可扩展地重新加载,android,listview,Android,Listview,我有一个显示新闻列表的listView开关。当用户阅读一条新闻时,它的外观应该是灰色的。因此在listadapter中,我检查一条新闻是否被阅读,如果它被阅读,布局1将加载到一条新闻,如果不是布局2,将加载到该项目。问题是:在litview中第一次加载的前10个项目显示得非常完美,但当我滚动以加载更多项目并返回到listviewgraylistview布局为2的项目的op时,会对布局1进行更改!这是我的listadaptercode:有什么问题 package ir.whc.news.a

我有一个显示新闻列表的
listView
开关。当用户阅读一条新闻时,它的外观应该是灰色的。因此在
listadapter
中,我检查一条新闻是否被阅读,如果它被阅读,布局1将加载到一条新闻,如果不是布局2,将加载到该项目。问题是:在
litview
中第一次加载的前10个项目显示得非常完美,但当我滚动以加载更多项目并返回到
listview
gray
listview
布局为2的项目的op时,会对布局1进行更改!这是我的
listadapter
code:有什么问题

    package ir.whc.news.adapter;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.support.annotation.LayoutRes;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.orm.query.Condition;
import com.orm.query.Select;

import java.util.List;

import ir.whc.news.R;
import ir.whc.news.classes.MyApplication;
import ir.whc.news.classes.Utility;
import ir.whc.news.model.NewsItem;
import ir.whc.news.model.SeenItem;

/**
 * Created by marzieh on 18/03/2016.
 */
public class NewsListAdapter extends BaseAdapter {


    private Activity activity;
    private LayoutInflater inflater;
    private List<NewsItem> newsItems;
    private int node_id;
    private int subdomain_id;
    Context context;

    ImageLoader imageLoader = MyApplication.getInstance().getImageLoader(true);

    public NewsListAdapter(Activity activity, List<NewsItem> newsItems, int subdomain_id, int node_id) {
        this.activity = activity;
        this.newsItems = newsItems;
        this.node_id = node_id;
        this.subdomain_id = subdomain_id;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.context = activity;

    }


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

    @Override
    public NewsItem getItem(int position) {
        return newsItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return newsItems.get(position).get_id();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Log.d("position is " ,String.valueOf(position));

        final NewsItem item = newsItems.get(position);
        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null)
            if (IsReed(item.get_id(),item.get_termId()))
                convertView = inflater.inflate(R.layout.item_news_iread, null);
            else
                convertView = inflater.inflate(R.layout.item_news, null);

        if (imageLoader == null)
            imageLoader = MyApplication.getInstance().getImageLoader(true);


        LinearLayout parrentLayout = (LinearLayout) convertView.findViewById(R.id.parentL);
        TextView titleHolder = (TextView) convertView.findViewById(R.id.text_title);
        TextView summeryHolder = (TextView) convertView.findViewById(R.id.text_summery);
        TextView dateHolder = (TextView) convertView.findViewById(R.id.text_date);
        NetworkImageView thumbpicHolder = (NetworkImageView) convertView
                .findViewById(R.id.image_news_thumb);
        final ImageView image_bookmark = (ImageView) convertView.findViewById(R.id.image_bookmark);



        titleHolder.setText(item.get_title());
        summeryHolder.setText(item.get_summary());
        imageLoader.get(item.get_imgPath(), imageLoader.getImageListener(thumbpicHolder,
                R.drawable.ic_launcher,
                android.R.drawable.ic_dialog_alert));

        thumbpicHolder.setImageUrl(item.get_imgPath(), imageLoader);
        thumbpicHolder.setVisibility(item.get_imgPath().trim().isEmpty() ? View.GONE : View.VISIBLE);
        dateHolder.setText(Utility.GetFormattedDteTime(newsItems.get(position).get_datePublish()));


        //checkBookmark
        if (Select.from(NewsItem.class).where(Condition.prop("_id").eq(item.get_id())).list().size() > 0)
            image_bookmark.setImageResource(R.drawable.ic_bookmarkfill);
        else
            image_bookmark.setImageResource(R.drawable.ic_bookmark_normal);
        //add or delet from  bookmark
        image_bookmark.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Utility.Insert_bookmark("_id", item, image_bookmark, NewsItem.class);
            }
        });



       /* Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_down);
        convertView.startAnimation(animation);

*/
        return convertView;
    }

    private boolean IsReed(int _id,int _term_id) {
        ////check is reed

        if (SeenItem.find(SeenItem.class, "_id = ? and _nodeid = ? and _termid = ? and _domainid= ? ", String.valueOf(_id),
                String.valueOf(node_id),
                String.valueOf(_term_id),
                String.valueOf(subdomain_id)).size() > 0) {

            return true;
        } else
            return false;

    }

}
包ir.whc.news.adapter;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Color;
导入android.graphics.PorterDuff;
导入android.graphics.PorterDuffColorFilter;
导入android.support.annotation.LayoutRes;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入com.android.volley.toolbox.ImageLoader;
导入com.android.volley.toolbox.NetworkImageView;
导入com.orm.query.Condition;
导入com.orm.query.Select;
导入java.util.List;
进口ir.whc.news.R;
导入ir.whc.news.classes.MyApplication;
导入ir.whc.news.classes.Utility;
导入ir.whc.news.model.NewsItem;
导入ir.whc.news.model.SeenItem;
/**
*marzieh于2016年3月18日创作。
*/
公共类NewsListAdapter扩展了BaseAdapter{
私人活动;
私人充气机;
私人列表新闻项目;
私有int节点_id;
私有int子域_id;
语境;
ImageLoader ImageLoader=MyApplication.getInstance().getImageLoader(true);
public NewsListAdapter(活动活动、列表新闻项、int子域\u id、int节点\u id){
这个。活动=活动;
this.newitems=新闻项;
this.node\u id=node\u id;
this.subdomain\u id=subdomain\u id;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
这个上下文=活动;
}
@凌驾
public int getCount(){
返回newsItems.size();
}
@凌驾
公共新闻项getItem(int位置){
返回新闻项。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回新闻项.get(position.get_id();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
Log.d(“位置为”,String.valueOf(位置));
最终新闻项=新闻项.get(位置);
如果(充气器==null)
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
if(convertView==null)
if(IsReed(item.get\u id(),item.get\u termId())
convertView=充气机。充气(R.layout.item\u news\u iread,空);
其他的
convertView=充气机。充气(R.layout.item_news,null);
如果(imageLoader==null)
imageLoader=MyApplication.getInstance().getImageLoader(true);
LinearLayout parrentLayout=(LinearLayout)convertView.findViewById(R.id.parentL);
TextView titleHolder=(TextView)convertView.findViewById(R.id.text\u title);
TextView summeryHolder=(TextView)convertView.findViewById(R.id.text\u summery);
TextView日期持有者=(TextView)convertView.findViewById(R.id.text\u日期);
NetworkImageView thumbpicHolder=(NetworkImageView)convertView
.findviewbyd(R.id.image\u news\u thumb);
最终ImageView图像\ U书签=(ImageView)convertView.findViewById(R.id.image\ U书签);
titleHolder.setText(item.get_title());
summeryHolder.setText(item.get_summary());
imageLoader.get(item.get_imgPath(),imageLoader.getImageListener(thumbpicHolder,
R.drawable.ic_发射器,
android.R.drawable.ic_对话框_警报);
thumbpicHolder.setImageUrl(item.get\u imgPath(),imageLoader);
thumbpicHolder.setVisibility(item.get\u imgPath().trim().isEmpty()?View.GONE:View.VISIBLE);
dateHolder.setText(Utility.getFormattedTime(newitems.get(position.get_datePublish());
//支票书签
if(Select.from(NewsItem.class).where(Condition.prop(“\u id”).eq(item.get\u id()).list().size()>0)
image\u bookmark.setImageResource(R.drawable.ic\u bookmarkfill);
其他的
image\u bookmark.setImageResource(R.drawable.ic\u bookmark\u normal);
//从书签添加或删除
image\u bookmark.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
插入书签(“\u id”,item,image\u书签,NewsItem.class);
}
});
/*动画=AnimationUtils.loadAnimation(上下文,R.anim.slide\u down);
convertView.startAnimation(动画);
*/
返回视图;
}
私有布尔IsReed(int\u id,int\u term\u id){
////支票是里德的
if(SeenItem.find(SeenItem.class),“\u id=?和\u nodeid=?和\u termid=?和\u domainid=?”,String.valueOf(\u id),
字符串.valueOf(节点id),
字符串.valueOf(_term_id),
String.valueOf(子域_id)).size()>0){
返回true;
}否则
返回false;
}
}

在AndroidAdpater中,遵循视图重用的概念。表示如果屏幕上显示5个视图,则滚动列表,然后第一个视图将循环到第六个视图。这就是为什么你会得到这样的结果。 所以只需删除代码中的以下if条件

if (convertView == null)
或者您可以使用两种类型的视图概念BaseAdapter,另外还有两种方法,如
getViewType(int-position)
通过这一点,你可以确定你想要哪种类型的视图
@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;


        if (convertView == null) {

            convertView = mLayoutInflater.inflate(R.layout.row_list_base, parent,false);
            holder = new ViewHolder();
            holder.videoImage = (ImageView)convertView.findViewById(R.id.image_video_preload);
            holder.title = (TextView) convertView.findViewById(R.id.text_video_title);
            holder.subtitle = (TextView) convertView.findViewById(R.id.text_video_subtitle);

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

        final ShortVideoModel item = getItem(position);

        if (item != null) {

            ImageLoaderHelper.displayImage(mContext, holder.videoImage, item.getImageUri());

            if (!TextUtils.isEmpty(item.getTitle())) {
                holder.title.setText(item.getTitle());
            }


           //... initialize rest of things
        }


        return convertView;
    }