Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 在长时间单击元素时修改listview内容_Android_Listview - Fatal编程技术网

Android 在长时间单击元素时修改listview内容

Android 在长时间单击元素时修改listview内容,android,listview,Android,Listview,我有一个由textview元素组成的列表视图。我想在长按该行时修改ListView的文本。由于数据不断更改,我不希望将文本视图引用的修改器设置为final。我实现了一个视图保持器,用于在滚动时保持数据。我的代码是: static class viewHolder { TextView t1,t2,t3; } public class myAdapter extends ArrayAdapter<searchData>{ public myAdapter(C

我有一个由textview元素组成的列表视图。我想在长按该行时修改ListView的文本。由于数据不断更改,我不希望将文本视图引用的修改器设置为final。我实现了一个视图保持器,用于在滚动时保持数据。我的代码是:

static class viewHolder
{
    TextView t1,t2,t3;
}

public class myAdapter extends ArrayAdapter<searchData>{

        public myAdapter(Context context, int resource, ArrayList<searchData> data) {
            super(context, resource,data);
            // TODO Auto-generated constructor stub

        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            final viewHolder holder;

            if(convertView == null){
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.location_list3, parent, false);     
                holder = new viewHolder();
                holder.t1 = (TextView) convertView.findViewById(R.id.textView1);
                holder.t2 = (TextView) convertView.findViewById(R.id.textView2);
                holder.t3 = (TextView) convertView.findViewById(R.id.textView_t1);
                convertView.setTag(holder);
            }
            else
            {
                 holder = (viewHolder) convertView.getTag();
            }
            Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/agencyfb-regular.ttf");

        //  TextView but = (TextView) row.findViewById(R.id.imageButton1);
            holder.t1.setTypeface(typeFace,typeFace.BOLD);
            holder.t2.setTypeface(typeFace);
            holder.t3.setTypeface(typeFace,typeFace.BOLD);              
            holder.t1.setText(dataList.get(position).getName());
            holder.t2.setText(dataList.get(position).getStatus());
            holder.t3.setText(dataList.get(position).getWaitingTime());

            //For adding layout change upon Long Press

            convertView.setOnLongClickListener(new OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(),             "Long Press at position: "+position, Toast.LENGTH_SHORT).show();
                    //ChangeText
                    return false;
                }
            });




            return convertView;
        }

    } 
静态类视图保持器
{
文本视图t1、t2、t3;
}
公共类myAdapter扩展了ArrayAdapter{
公共myAdapter(上下文、int资源、ArrayList数据){
超级(上下文、资源、数据);
//TODO自动生成的构造函数存根
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
最终持票人;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.location_list3,父项,false);
holder=新的viewHolder();
holder.t1=(TextView)convertView.findViewById(R.id.textView1);
holder.t2=(TextView)convertView.findViewById(R.id.textView2);
holder.t3=(TextView)convertView.findViewById(R.id.TextView_t1);
convertView.setTag(支架);
}
其他的
{
holder=(viewHolder)convertView.getTag();
}
Typeface-Typeface=Typeface.createFromAsset(getAssets(),“font/agencyfb-regular.ttf”);
//TextView but=(TextView)row.findViewById(R.id.imageButton1);
holder.t1.SETTYPE(字体,字体.粗体);
holder.t2.SETTYPE(字体);
holder.t3.SETTYPE(字体,字体.粗体);
holder.t1.setText(dataList.get(position.getName());
holder.t2.setText(dataList.get(position.getStatus());
holder.t3.setText(dataList.get(position.getWaitingTime());
//用于在长按时添加布局更改
setOnLongClickListener(新的OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
//TODO自动生成的方法存根
Toast.makeText(getApplicationContext(),“长按位置:”+位置,Toast.LENGTH\u SHORT.show();
//更改文本
返回false;
}
});
返回视图;
}
} 

我猜它不起作用了

您应该尝试设置ListView的侦听器,而不是ListView中的视图。还可以使用OnItemLongClickListener而不是OnLongClickListener

因此,在你的片段或活动中:

listview.OnItemLongClickListener.setOnItemLongClickListener(
    new OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, 
        View view, int position, long id) {

        Object o = listview.getAdapter().getItem(position);
        //do stuff 

    }
});
listview.OnItemLongClickListener.setOnItemLongClickListener(
新建OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父级,
视图、整型位置、长id){
对象o=listview.getAdapter().getItem(位置);
//做事
}
});

它返回什么类型的对象?我想获得,比如说像文本视图或其他一些UI控件。即使通过铸造它,我也无法访问它的方法。怎么办?