Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
Java ListView选择多个项目_Java_Android_Sqlite_Listview - Fatal编程技术网

Java ListView选择多个项目

Java ListView选择多个项目,java,android,sqlite,listview,Java,Android,Sqlite,Listview,我对android中的listview有一个问题,我创建了一个列表视图,使用自定义ArrayAdapter从SQLite数据库获取数据 当用户选择一个项目时,我想显示一个图像视图,但当我单击一个项目时,图像(复选标记)显示在其他3个项目中 我不知道问题到底出在哪里,以下是我的适配器代码: import info.androidhive.tabsswipe.R; import java.util.List; import android.app.Activity; import android

我对android中的listview有一个问题,我创建了一个列表视图,使用自定义ArrayAdapter从SQLite数据库获取数据
当用户选择一个项目时,我想显示一个图像视图,但当我单击一个项目时,图像(复选标记)显示在其他3个项目中
我不知道问题到底出在哪里,以下是我的适配器代码:

import info.androidhive.tabsswipe.R;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.itdinamik.tabswipe.CompareVehicle;
import com.itdinamik.vcompare.MySQLiteHelper;
import com.itdinamik.vcompare.Vehicle;

public class ComperAdapter extends ArrayAdapter<Vehicle>{

List<Vehicle>   data;
Context context;
int layoutResID;
Vehicle itemdata;
MySQLiteHelper dbhelper;

public ComperAdapter(Context context, int layoutResourceId, List<Vehicle> data) {

super(context, layoutResourceId, data);
this.data=data;
this.context=context;
this.layoutResID=layoutResourceId;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
final NewsHolder holder;
View row = convertView;

dbhelper = new MySQLiteHelper(context);

if(row == null)
{
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    row = inflater.inflate(layoutResID, parent, false);

    holder = new NewsHolder();

    holder.itemNameTitle = (TextView)row.findViewById(R.id.VehicleTxt);
    holder.itemNameScore = (TextView)row.findViewById(R.id.Score);
    holder.CheckedMark=(ImageView)row.findViewById(R.id.Checked);
    holder.Vehicle=(ImageView)row.findViewById(R.id.Vehicle);
    holder.RL = (RelativeLayout)row.findViewById(R.id.Rv);

    row.setTag(holder);
}
else
{
    holder = (NewsHolder)row.getTag();
}

//Toast.makeText(getContext(), String.valueOf(position +" - " + CompareVehicle.ClickedItem),               Toast.LENGTH_SHORT).show();
if(CompareVehicle.ItemClieckd) {
 if(position == CompareVehicle.ClickedItem) {
     Log.w("Position", String.valueOf(position));
     holder.CheckedMark.setVisibility(View.VISIBLE);
     holder.RL.setBackgroundColor(Color.rgb(201, 50, 39));
 }

}
itemdata = data.get(position);
holder.itemNameTitle.setText(itemdata.getTitle() + " - " + itemdata.getKraj() + " - "+ String.valueOf(position) + " - " + CompareVehicle.ClickedItem);

double totaldefault = itemdata.getOhranjenost()*0.25+itemdata.getPrevozeni()*0.16+
        itemdata.getServis()*0.14+ itemdata.getCena()*0.13+
        itemdata.getPoraba()*0.11+ itemdata.getStarost()*0.08+
        itemdata.getDodatna()*0.07+ itemdata.getCenaZav()*0.06;

holder.itemNameScore.setText(String.format("%.1f",totaldefault));

return row;
}

static class NewsHolder{

TextView itemNameTitle;
TextView itemNameScore;
ImageView CheckedMark, Vehicle;
RelativeLayout RL;
}

}
import info.androidhive.tabsswipe.R;
导入java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Color;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.itdinamik.tabswipe.compareHicle;
导入com.itdinamik.vcompare.MySQLiteHelper;
进口com.itdinamik.vcompare.Vehicle;
公共类竞争对手扩展ArrayAdapter{
列出数据;
语境;
int layoutResID;
车辆项目数据;
MySQLiteHelper-dbhelper;
公共ComperadPter(上下文、内部布局资源ID、列表数据){
超级(上下文、布局资源ID、数据);
这个。数据=数据;
this.context=context;
this.layoutResID=layoutResourceId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终新闻持有人;
视图行=转换视图;
dbhelper=新的MySQLiteHelper(上下文);
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
row=充气机。充气(layoutResID,父级,false);
持有者=新的新闻持有者();
holder.itemNameTitle=(TextView)行.findViewById(R.id.VehicleTxt);
holder.itemnescore=(TextView)row.findViewById(R.id.Score);
holder.CheckedMark=(ImageView)row.findViewById(R.id.Checked);
holder.Vehicle=(ImageView)row.findViewById(R.id.Vehicle);
holder.RL=(RelativeLayout)row.findViewById(R.id.Rv);
row.setTag(支架);
}
其他的
{
holder=(新闻持有者)行。getTag();
}
//Toast.makeText(getContext(),String.valueOf(position+“-”+compareHicle.ClickedItem),Toast.LENGTH\u SHORT.show();
如果(比较hicle.ItemClieckd){
如果(位置==比较工具。单击编辑项){
Log.w(“位置”,String.valueOf(位置));
holder.CheckedMark.setVisibility(视图可见);
holder.RL.setBackgroundColor(Color.rgb(201,50,39));
}
}
itemdata=data.get(位置);
holder.itemNameTitle.setText(itemdata.getTitle()+“-”+itemdata.getKraj()+“-”+String.valueOf(position)+“-”+CompareHicle.ClickedItem);
double totaldefault=itemdata.getOhranjenost()*0.25+itemdata.getPrevozeni()*0.16+
itemdata.getServis()*0.14+itemdata.getCena()*0.13+
itemdata.getPoraba()*0.11+itemdata.getStarost()*0.08+
itemdata.getDodatna()*0.07+itemdata.getCenaZav()*0.06;
holder.itemnescore.setText(String.format(“%.1f”,totaldefault));
返回行;
}
静态类新闻持有者{
TextView项目名称标题;
TextView项目名称核心;
ImageView检查标记,车辆;
相对寿命;
}
}
这是我用来显示列表视图的片段

import info.androidhive.tabsswipe.R;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.itdinamik.tabswipe.adapter.ComperAdapter;
import com.itdinamik.vcompare.MySQLiteHelper;
import com.itdinamik.vcompare.Vehicle;

public class CompareVehicle extends Fragment{
ViewPager mViewPager;
ArrayList<Vehicle>  DataList;
static MySQLiteHelper dbhelper;

ComperAdapter adapter;
List<Vehicle> itemData;


ListView lv;
Button CompareButton;

int ClickedNum = 0;
public static int ClickedItem;
public static boolean ItemClieckd = false;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_compare_vehicle, container, false);
    lv = (ListView)rootView.findViewById(R.id.CompareList);
    CompareButton = (Button)rootView.findViewById(R.id.CompareButton);

     dbhelper = new MySQLiteHelper(getActivity());

    // get all vehicles
     itemData = dbhelper.getAllVehicles();

     adapter=new ComperAdapter(getActivity(),R.layout.list_single,itemData);
     lv.setAdapter(adapter);

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
            // TODO Auto-generated method stub
            ClickedItem = position;
            ItemClieckd = true;
            ClickedNum += 1;
            adapter.notifyDataSetChanged();
            /*RelativeLayout Rl = (RelativeLayout)arg1.findViewById(R.id.Rv);
            ImageView CheckImg = (ImageView)arg1.findViewById(R.id.Checked);
            Rl.setBackgroundColor(Color.rgb(201, 50, 39));
            CheckImg.setVisibility(View.VISIBLE);*/

            //Toast.makeText(getActivity(), String.valueOf(mSelectedItem), Toast.LENGTH_LONG).show();

        }
    });


     CompareButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (ClickedNum < 2) {
                Toast.makeText(getActivity(), "Please mark at least 2 items to compare them", Toast.LENGTH_LONG).show();
            }
        }
    });


    return rootView;
}

}
import info.androidhive.tabsswipe.R;
导入java.util.ArrayList;
导入java.util.List;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.view.ViewPager;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.RelativeLayout;
导入android.widget.Toast;
导入com.itdinamik.tabswipe.adapter.comperedapter;
导入com.itdinamik.vcompare.MySQLiteHelper;
进口com.itdinamik.vcompare.Vehicle;
公共类CompareHicle扩展片段{
ViewPager mViewPager;
ArrayList数据表;
静态MySQLiteHelper-dbhelper;
竞争适配器;
列出项目数据;
ListView lv;
按钮比较器按钮;
int ClickedNum=0;
公共静态int-ClickedItem;
公共静态布尔项clieckd=false;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u compare\u vehicle,container,false);
lv=(ListView)rootView.findViewById(R.id.CompareList);
CompareButton=(按钮)rootView.findviewbyd(R.id.CompareButton);
dbhelper=newmysqlitehelper(getActivity());
//把所有的车都开走
itemData=dbhelper.getAllVehicles();
adapter=newcomperedapter(getActivity(),R.layout.list\u single,itemData);
低压设置适配器(适配器);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
单击编辑项=位置;
ItemClieckd=true;
ClickedNum+=1;
adapter.notifyDataSetChanged();
/*RelativeLayout Rl=(RelativeLayout)arg1.findViewById(R.id.Rv);
ImageView CheckImg=(ImageView)arg1.findViewById(R.id.Checked);
Rl.setBackgroundColor(Color.rgb(201,50,39));
CheckImg.setVisibility(View.VISIBLE)*/
//Toast.makeText(getActivity(),String.valueOf(mSelectedItem),Toast.LENGTH_LONG.show();
}
});
CompareButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
如果(ClickedNum<2){
Toast.makeText(getActivity(),“请至少标记两个项目以进行比较”,Toast.LENGTH\u LONG.show();
}
}
});
返回rootView;
}
}

谢谢

为了避免在
列表视图
等中出现视图循环问题,我在项目数据
列表中为选中状态添加了一个
布尔值
public class MyListAdapter extends ArrayAdapter<MyItem> {

    // interface for handling item child view events
    public interface MyListAdapterListener {
        void onItemCheckClicked(int index);
        void onItemLabelLongClicked(int index);        
    }

    private MyListAdapterListener mMyListAdapterListener;
    int layoutResID;

    // Constructor
    public MyListAdapter(Context context, int resource, List<MyItem> myItems) {
        super(context, resource, myItems);
        layoutResID = resource;
    }

    public void setMyListAdapterListener(MyListAdapterListener listener) {
        this.mMyListAdapterListener = listener;
    }

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

        // setup the row
        View row;
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            row = inflater.inflate(layoutResID, null);
        } else {
            row = convertView;
        }

        // setup the ViewHolder for this item
        ViewHolder holder = (ViewHolder) row.getTag();
        if (holder == null) {
            holder = new ViewHolder(row);
            row.setTag(holder);
        }

        // setup this item's label view
        holder.label.setText(getItem(position).label);
        // tag this item's label view with position so it can be retrieved in the onLongClick
        holder.label.setTag(position);
        // set the OnLongClickListener for the this item's label view 
        holder.label.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (mActivityListListener != null) {
                // retrieve position from the view's tag, and trigger the listeners onItemLabelLongClicked method
                    mActivityListListener.onItemLabelLongClicked((Integer)v.getTag());
                }
                return false;
            }
        });

        // setup this item's checkbox view
        holder.checkbox.setChecked(getItem(position).myItemCheckBoolean);
        // tag this item's checkbox view with position so it can be retrieved in the onClick
        holder.checkbox.setTag(position);
        // set the OnClickListener for the this item's checkbox view 
        holder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMyListAdapterListener != null) {
                    // retrieve position from the view's tag, and trigger the listeners onItemCheckClicked method
                    mMyListAdapterListener.onItemCheckClicked((Integer) v.getTag());
                }                    
            }
        });

        return row;
    }

    class ViewHolder {
        CheckBox checkbox = null;
        TextView label = null;

        ViewHolder(View row) {
            this.checkbox = (CheckBox) row.findViewById(R.id.check_box);
            this.label = (TextView) row.findViewById(R.id.item_label);
        }
    }
}
public class MyItem {
    public String label;
    public boolean myItemCheckBoolean;
}
public class MyFragment extends Fragment {
....
private List<MyItem> myItems = new ArrayList<MyItem>();
....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment__my_list, container, false);
    lv = (ListView)rootView.findViewById(R.id.my_list);

    // For example purposes, fill myItems with dummy data setting all checkboxes initially to false
    for (int i = 0; i < 10; i++) {
        MyItem myItem = new MyItem();
        myItem.label = "Item " + i;
        myItem.myItemCheckBoolean = false;
        myItems.add(myItem);
    }

    MyListAdapter adapter = new MyListAdapter(getActivity(), R.layout.my_list_item, myItems);
    adapter.setMyListAdapterListener( new MyListAdapter.MyListAdapterListener() {

        @Override
        public void onItemCheckClicked(int index) {
            Log.d("MyFragment", "Item " + index + " Check Clicked");
            // toggle the item's boolean
            myItems.get(index).myItemCheckBoolean = !myItems.get(index).myItemCheckBoolean;
        }

        @Override
        public void onItemLabelLongClicked(int index) {
            Log.d("MyFragment", "Item " + index + " Label LongClicked");
        }

    }

    lv.setAdapter(adapter);
    ....
    return rootView;
}
public class MyListAdapter extends ArrayAdapter<MyItem> {

    // interface for handling item child view events
    public interface MyListAdapterListener {
        void onItemCheckClicked(int index);
        void onItemLabelLongClicked(int index);        
    }

    private MyListAdapterListener mMyListAdapterListener;
    int layoutResID;

    // Constructor
    public MyListAdapter(Context context, int resource, List<MyItem> myItems) {
        super(context, resource, myItems);
        layoutResID = resource;
    }

    public void setMyListAdapterListener(MyListAdapterListener listener) {
        this.mMyListAdapterListener = listener;
    }

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

        // setup the row
        View row;
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            row = inflater.inflate(layoutResID, null);
        } else {
            row = convertView;
        }

        // setup the ViewHolder for this item
        ViewHolder holder = (ViewHolder) row.getTag();
        if (holder == null) {
            holder = new ViewHolder(row);
            row.setTag(holder);
        }

        // setup this item's label view
        holder.label.setText(getItem(position).label);
        // tag this item's label view with position so it can be retrieved in the onLongClick
        holder.label.setTag(position);
        // set the OnLongClickListener for the this item's label view 
        holder.label.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (mActivityListListener != null) {
                // retrieve position from the view's tag, and trigger the listeners onItemLabelLongClicked method
                    mActivityListListener.onItemLabelLongClicked((Integer)v.getTag());
                }
                return false;
            }
        });

        // setup this item's image view based on the current state of the boolean
        if (getItem(position).myItemCheckBoolean) {
            holder.image.setImageResource(R.drawable.image_a);
        } else {
            holder.image.setImageResource(R.drawable.image_b);
        }
        // tag this item's image view with position so it can be retrieved in the onClick
        holder.image.setTag(position);
        // set the OnClickListener for the this item's image view 
        holder.image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMyListAdapterListener != null) {
                    // retrieve position from the view's tag, and trigger the listeners onItemCheckClicked method
                    mMyListAdapterListener.onItemCheckClicked((Integer) v.getTag());
                }                    
            }
        });

        // setup this item's background based on the current state of the boolean
        if (getItem(position).myItemCheckBoolean) {
            holder.layout.setBackgroundColor(Color.red);
        } else {
            holder.layout.setBackgroundColor(Color.white);
        }

        return row;
    }

    class ViewHolder {
        ImageView image = null;
        TextView label = null;
        RelativeLayout layout = null;

        // constructor
        ViewHolder(View row) {
            this.image = (ImageView) row.findViewById(R.id.item_image);
            this.label = (TextView) row.findViewById(R.id.item_label);
            this.layout = (RelativeLayout) row.findViewById(R.id.item_layout)
        }
    }
}