gpt4 book ai didi

android - ListView 中的数据在焦点更改时从顶行移动到底行

转载 作者:行者123 更新时间:2023-11-29 01:58:31 24 4
gpt4 key购买 nike

我正在使用具有 TextView 和编辑文本的 ListView 。我通过 ViewHolder 控制其中的数据。问题是,当我在第一列和第二列中写入数据时,在屏幕上可见的部分以及滚动时,第一行的数据会自动复制到最后一行。

代码如下:

private class MobileArrayAdapter extends ArrayAdapter
{
ViewHolder holder;
private Context context;
private ArrayList values;

@SuppressWarnings("unchecked")
public MobileArrayAdapter(Context context, ArrayList values)
{
super(context, R.layout.taskstrt, values);
this.context = context;
this.values = values;
System.out.println("in mobile constructor");
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if (convertView == null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.taskstrt, parent, false);
holder.editText = (EditText) convertView.findViewById(R.id.editText1);
holder.textView = (TextView) convertView.findViewById(R.id.textView1);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}

holder.textView.setText(values.get(position).toString());
holder.textView.setId(position);
holder.editText.setId(position);
holder.editText.setFocusable(false);
// holder.editText.setFocusableInTouchMode(true);

holder.editText.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
final int positio = v.getId();
edittexthold = (EditText) v;
textholder = (TextView) v;
edittexthold.setFocusable(true);

if (edittexthold.getText().toString().length() > 0)

{
HashMap<Integer, String> Map = new HashMap<Integer, String>();
Map.put(positio, edittexthold.getText().toString());

data.set(positio, Map);
System.out.println(data);
}

System.out.println(positio + " this is position that is clicked");
if (positio == 4)
{
System.out.println("going to assign ID");
qq = positio;
showDialog(NAME_LIST);
}

if (positio == 5)
{
qq = positio;
System.out.println("going to start time ID");
showDialog(STARTTIME);
}

if (positio == 3)
{
qq = positio;
System.out.println("going to date picker ID");
showDialog(DATE_DIALOG_ID);
}
}
}) ;
holder.editText.setOnFocusChangeListener(new OnFocusChangeListener()
{

public void onFocusChange(View v, boolean hasFocus)
{
//if(!hasFocus)
{
final int positio = v.getId();
String conv = null;
final EditText edittexthold = (EditText) v;
final TextView textholder = (TextView) v;
edittexthold.setFocusable(true);

if (edittexthold.getText().toString().length() > 0)

{
HashMap<Integer, String> Map = new HashMap<Integer, String>();
Map.put(positio, edittexthold.getText().toString());

data.set(positio, Map);
System.out.println(data);
}

edittexthold.setFocusable(false);
}
}
});

最佳答案

Please try this code it may help you

private class MobileArrayAdapter extends ArrayAdapter
{

ViewHolder holder;
private Context context;
private ArrayList values;

@SuppressWarnings("unchecked")
public MobileArrayAdapter(Context context, ArrayList values)
{

super(context, R.layout.taskstrt, values);
this.context = context;
this.values = values;
System.out.println("in mobile constructor");



}

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


LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = inflater.inflate(R.layout.taskstrt, parent, false);

if (convertView == null || convertView.getTag() == null) {

holder = new ViewHolder();



holder.editText = (EditText) convertView.findViewById(R.id.editText1);
holder.textView = (TextView) convertView.findViewById(R.id.textView1);

holder.textView.setText(values.get(position).toString());

holder.textView.setId(position);
holder.editText.setId(position);
holder.editText.setFocusable(false);
// holder.editText.setFocusableInTouchMode(true);

holder.editText.setOnClickListener(new OnClickListener() {




public void onClick(View v) {



final int positio = v.getId();
edittexthold = (EditText) v;
textholder = (TextView) v;
edittexthold.setFocusable(true);

if(edittexthold.getText().toString().length()>0)

{ HashMap<Integer, String> Map=new HashMap<Integer, String>();
Map.put(positio, edittexthold.getText().toString());

data.set(positio, Map);
System.out.println(data);
}

System.out.println(positio+" this is position that is clicked");
if(positio==4)
{
System.out.println("going to assign ID");
qq=positio;
showDialog(NAME_LIST);


}

if(positio==5)
{
qq=positio;
System.out.println("going to start time ID");
showDialog(STARTTIME);
}

if(positio==3)
{
qq=positio;
System.out.println("going to date picker ID");
showDialog(DATE_DIALOG_ID);
}







}
}) ;
holder.editText.setOnFocusChangeListener(new OnFocusChangeListener() {

public void onFocusChange(View v, boolean hasFocus)
{

//if(!hasFocus)
{


final int positio = v.getId();
String conv=null;
final EditText edittexthold = (EditText) v;
final TextView textholder = (TextView) v;
edittexthold.setFocusable(true);

if(edittexthold.getText().toString().length()>0)

{ HashMap<Integer, String> Map=new HashMap<Integer, String>();
Map.put(positio, edittexthold.getText().toString());

data.set(positio, Map);
System.out.println(data);
}

edittexthold.setFocusable(false);
} }
});


convertView.setTag(holder);

}

关于android - ListView 中的数据在焦点更改时从顶行移动到底行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com