Java ListView回收器删除数据

Java ListView回收器删除数据,java,android,listview,android-edittext,recycle,Java,Android,Listview,Android Edittext,Recycle,我有一个自定义的ListView,其中有一些TextView和EditText,我想防止回收者在项目滚动出视图时删除数据。我看了其他帖子,但还没有找到解决办法。请帮忙 这是我的密码 Java : import android.text.Editable; import android.view.LayoutInflater import android.view.View; import android.view.ViewGroup; import android.widget.BaseAd

我有一个自定义的ListView,其中有一些TextView和EditText,我想防止回收者在项目滚动出视图时删除数据。我看了其他帖子,但还没有找到解决办法。请帮忙

这是我的密码

Java :


import android.text.Editable;
import android.view.LayoutInflater
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;



public class CustomAdapter extends BaseAdapter {
    private int[] fif={0,0,0,0,0,0},tw={0,0,0,0,0,0},scorePerm={0,0,0,0,0,0},scorePerm2=       {0,0,0,0,0,0};
    private int scoreTemp=0;`






private static final String TAG = CustomAdapter.class.getSimpleName();
ArrayList<DataModel> listArray;

public CustomAdapter() {
    listArray = new ArrayList<DataModel>(5);
    listArray.add(new DataModel("Player 1", 1 ));
    listArray.add(new DataModel("Player 2", 2));
    listArray.add(new DataModel("Player 3", 3));
    listArray.add(new DataModel("Player 4", 4));
    listArray.add(new DataModel("Player 5", 5));
    listArray.add(new DataModel("Player 6", 6));

}

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

@Override
public Object getItem(int i) {
    return listArray.get(i);    
}

@Override
public long getItemId(int i) {
    return i;                   
}

public int getViewTypeCount() {                 

    return getCount();
}

@Override
public int getItemViewType(int position) {

    return position;
}

@Override
public View getView(int index, View view, final ViewGroup parent) {

   if (view == null) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
       view = inflater.inflate(R.layout.list, parent,false);

    }



    view.setClickable(true);
    view.setFocusable(true);
    view.setBackgroundResource(android.R.drawable.menuitem_background);

    final DataModel dataModel = listArray.get(index);

    TextView textView = (TextView) view.findViewById(R.id.player_un);
    textView.setText(dataModel.getName());

    Button button0 = (Button) view.findViewById(R.id.plus50);

    Button button1 = (Button) view.findViewById(R.id.minus50);

    Button button2 = (Button) view.findViewById(R.id.plus20);

    Button button3 = (Button) view.findViewById(R.id.minus20);

    Button ok = (Button) view.findViewById(R.id.un_ad_ok);

    final Button reset = (Button) view.findViewById(R.id.un_ad_res);

    final TextView score = (TextView) view.findViewById(R.id.score);
    score.setText(R.string.scorepoints);

    final EditText fifty = (EditText) view.findViewById(R.id.score50);
    fifty.setText(R.string.scorepoints);

    final EditText two = (EditText) view.findViewById(R.id.score20);
    two.setText(R.string.scorepoints);

    final EditText other = (EditText) view.findViewById(R.id.scoreplus);
    other.setText(R.string.scorepoints);



    //other code 



    return view;
}
}


ListView XML :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Uno" >

 <EditText
     android:id="@+id/scoreplus"
     android:layout_width="50dp"
     android:layout_height="40dp"
     android:layout_alignLeft="@+id/plus20"
     android:layout_alignParentRight="true"
     android:layout_alignParentTop="true"
     android:descendantFocusability="beforeDescendants"
     android:hint="@string/scorepoints"
     android:inputType="number" />

 <Button
     android:id="@+id/minus20"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="30dp"
     android:layout_height="40dp"
     android:layout_alignParentRight="true"
     android:layout_below="@+id/scoreplus"
     android:text="@string/minus" />

 <EditText
     android:id="@+id/score20"
     android:layout_width="40dp"
     android:layout_height="40dp"
     android:layout_alignBaseline="@+id/minus20"
     android:layout_alignBottom="@+id/minus20"
     android:layout_toLeftOf="@+id/minus20"
     android:inputType="number"
     android:text="@string/scorepoints"
     android:descendantFocusability="beforeDescendants"
     android:textSize="12sp" />

 <Button
     android:id="@+id/plus20"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="30dp"
     android:layout_height="40dp"
     android:layout_alignTop="@+id/score20"
     android:layout_toLeftOf="@+id/score20"
     android:text="@string/plus" />

 <ImageView
     android:id="@+id/Image20"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBottom="@+id/score20"
     android:layout_toLeftOf="@+id/plus20"
     android:contentDescription="@string/player"
     android:src="@drawable/ic_launcher" />

 <Button
     android:id="@+id/minus50"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="30dp"
     android:layout_height="40dp"
     android:layout_alignTop="@+id/score20"
     android:layout_toRightOf="@+id/score50"
     android:text="@string/minus" />

 <EditText
     android:id="@+id/score50"
     android:layout_width="40dp"
     android:layout_height="40dp"
     android:layout_alignBaseline="@+id/minus50"
     android:layout_alignBottom="@+id/minus50"
     android:layout_toRightOf="@+id/plus50"
     android:inputType="number"
     android:text="@string/scorepoints"
     android:descendantFocusability="beforeDescendants"
     android:textSize="12sp" />

 <Button
     android:id="@+id/plus50"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="30dp"
     android:layout_height="40dp"
     android:layout_alignTop="@+id/score50"
     android:layout_toRightOf="@+id/Image50"
     android:text="@string/plus" />

 <ImageView
     android:id="@+id/Image50"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBottom="@+id/plus50"
     android:layout_alignParentLeft="true"
     android:contentDescription="@string/player"
     android:src="@drawable/ic_launcher" />

 <TextView
     android:id="@+id/score"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBaseline="@+id/scoreplus"
     android:layout_alignBottom="@+id/scoreplus"
     android:layout_toRightOf="@+id/score50"
     android:text="@string/scorepoints"
     android:textAppearance="?android:attr/textAppearanceLarge" />

 <TextView
     android:id="@+id/player_un"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBaseline="@+id/score"
     android:layout_alignBottom="@+id/score"
     android:layout_alignParentLeft="true"
     android:text="@string/player"
     android:textAppearance="?android:attr/textAppearanceLarge" />

 <Button
     android:id="@+id/un_ad_ok"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="wrap_content"
     android:layout_height="40dp"
     android:layout_alignParentLeft="true"
     android:layout_alignRight="@+id/minus50"
     android:layout_below="@+id/score50"
     android:text="@string/ok" />

 <Button
     android:id="@+id/un_ad_res"
     style="?android:attr/buttonStyleSmall"
     android:layout_width="50dp"
     android:layout_height="40dp"
     android:layout_alignLeft="@+id/Image20"
     android:layout_alignParentRight="true"
     android:layout_below="@+id/minus20"
     android:enabled="false"
     android:text="@string/cancel" />
Java:
导入android.text.Editable;
导入android.view.LayoutInflater
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类CustomAdapter扩展了BaseAdapter{
private int[]fif={0,0,0,0,0},tw={0,0,0,0,0},scorePerm={0,0,0,0,0},scorePerm2={0,0,0,0,0};
私有int scoreTemp=0`
私有静态最终字符串标记=CustomAdapter.class.getSimpleName();
ArrayList列表数组;
公共自定义适配器(){
listArray=新的ArrayList(5);
add(新的数据模型(“播放器1”,1));
add(新的数据模型(“播放器2”,2));
add(新的数据模型(“player3”,3));
add(新的数据模型(“player4”,4));
add(新的数据模型(“播放器5”,5));
add(新的数据模型(“player6”,6));
}
@凌驾
public int getCount(){
返回listary.size();
}
@凌驾
公共对象getItem(int i){
返回listArray.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
public int getViewTypeCount(){
返回getCount();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
公共视图getView(int索引、视图视图、最终视图组父视图){
如果(视图==null){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图=充气机。充气(R.layout.list,父级,false);
}
视图。可点击设置(真);
view.setFocusable(true);
view.setBackgroundResource(android.R.drawable.menuitem\u后台);
final DataModel DataModel=listArray.get(索引);
TextView TextView=(TextView)view.findViewById(R.id.player\u un);
setText(dataModel.getName());
Button button0=(Button)view.findViewById(R.id.plus50);
Button button1=(按钮)视图.findViewById(R.id.minus50);
Button button2=(Button)view.findViewById(R.id.plus20);
Button button3=(Button)view.findViewById(R.id.minus20);
Button ok=(Button)view.findViewById(R.id.un_ad_ok);
最终按钮重置=(按钮)视图.findViewById(R.id.un_ad_res);
最终TextView得分=(TextView)view.findViewById(R.id.score);
score.setText(R.string.scorepoints);
final EditText五十=(EditText)view.findViewById(R.id.score50);
50.setText(R.string.scorepoints);
final EditText two=(EditText)view.findviewbyd(R.id.score20);
2.setText(R.string.scorepoints);
final EditText other=(EditText)view.findViewById(R.id.scoreplus);
other.setText(R.string.scorepoints);
//其他代码
返回视图;
}
}
ListView XML:

您没有像应该的那样实现listview的适配器

请观看“”并可能阅读,以了解如何处理视图持有者

如果希望将文本保存在editText中,则应在文本更改后立即更新数据,或者在用户触摸listView时更新数据(这稍微困难一点)


出现此“错误”的原因是listView重新使用了在其外部滚动的旧视图,因此您需要将丢失的数据存储在某个位置,并始终将视图更新为正确的数据。

。我非常喜欢保存ram的回收机制+1为您。@Eng.Fouad如果实施良好,您还可以使其非常快速和顺利。此外,如果涉及互联网连接,您可以使用最近在google IO 2013:Impression上显示的截击库!我在哪里可以找到截击库?正如这个网站所说:,使用命令“git clone”