Java Android ListView目标自定义单元格文本框
我有一个Java Android ListView目标自定义单元格文本框,java,android,listview,custom-cell,Java,Android,Listview,Custom Cell,我有一个列表视图,其中有一个带有2个按钮的自定义单元格、一个标签和一个编辑文本。我得到了它,所以当我点击自定义单元格的按钮时,它会做一个日志,说明按钮被按下的位置。但是我不知道我是怎么做的,所以当我按下按钮时,它会改变该单元格文本框中的文本。我不知道如何在某个位置引用它 我的XML是: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sche
列表视图
,其中有一个带有2个按钮的自定义单元格
、一个标签
和一个编辑文本
。我得到了它,所以当我点击自定义单元格的按钮时,它会做一个日志,说明按钮被按下的位置。但是我不知道我是怎么做的,所以当我按下按钮时,它会改变该单元格文本框中的文本。我不知道如何在某个位置引用它
我的XML是:
<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" >
<ListView
android:id="@+id/lvItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:drawSelectorOnTop="false" >
</ListView>
</RelativeLayout>
我尝试用et.setText()
引用文本框,但没有成功。有没有一种方法可以说atPosisiton.et.setText
等
非常感谢。首先,我坚持让您使用ListView,这会更快,因为每次ListView滚动并重新使用已创建/实例化的视图时,它都会减少ListView行项目视图的创建。要保持
EditText/CheckBox
的值,必须使用setTag()
在ListView滚动时保持其位置。我也写了一篇同样的博文。编辑测试合格懒汉阶级 自定义适配器中的getView()
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final TextView textView;
final EditText et;
final Button sub;
if (v == null) {
v = inflater.inflate(R.layout.row, null);
textView = (TextView) v.findViewById(R.id.tvLabel);
textView.setText("Hello"+position);
et = (EditText) v.findViewById(R.id.etWhatToFill);
sub = (Button) v.findViewById(R.id.btnSubmit);
v.setTag(new LazyViewHolder(textView, et, sub));
sub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
textView.setText(et.getText().toString());
}
});
} else {
LazyViewHolder viewHolder = (LazyViewHolder) v.getTag();
sub = viewHolder.getBtnSub();
et=viewHolder.getEt();
textView = viewHolder.getText();
}
return v;
}
请查看有关ListView和CustomListView的详细说明适配器中的hi declare按钮不在get view和ViewHolder中。如下 按钮btPlus,btMinus; 视窗座
class ViewHolder {
int fieldPossition;
}
@凌驾
公共视图getView(内部位置、视图v、视图组arg2){
就是这样。实际上您得到的位置是正确的,但是调用notifyDataSetChanged()后,ListView将使用getView()方法将所有项目视图替换为新的项目视图。
因此,您应该将单击的位置保留在某个位置,并在getView()中设置EditText.我已经对Tom发布的代码进行了更改,我想我们应该给他时间回复,而不是在这里浪费时间,如果他需要解释他所做的代码,那么我很乐意提供:)谢谢。这不会出错,但不会更新文本。我想你应该在pl中标记你的观点请在我尝试更新代码时参考此内容抱歉回复太晚我已在编辑中测试了我的代码工作正常您可以根据您的要求进行更改,如果有帮助,请接受答案
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final TextView textView;
final EditText et;
final Button sub;
if (v == null) {
v = inflater.inflate(R.layout.row, null);
textView = (TextView) v.findViewById(R.id.tvLabel);
textView.setText("Hello"+position);
et = (EditText) v.findViewById(R.id.etWhatToFill);
sub = (Button) v.findViewById(R.id.btnSubmit);
v.setTag(new LazyViewHolder(textView, et, sub));
sub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
textView.setText(et.getText().toString());
}
});
} else {
LazyViewHolder viewHolder = (LazyViewHolder) v.getTag();
sub = viewHolder.getBtnSub();
et=viewHolder.getEt();
textView = viewHolder.getText();
}
return v;
}
class ViewHolder {
int fieldPossition;
}
holder = new ViewHolder();
LayoutInflater inf=getLayoutInflater();
v=inf.inflate(R.layout.noncriticalasset, arg2,false);
TextView tv=(TextView)v.findViewById(R.id.txtOption);
EditText et =(EditText)v.findViewById(R.id.tbAnswer);
btPlus=(Button)v.findViewById(R.id.btnPlus);
btMinus=(Button)v.findViewById(R.id.btnMinus);
fieldPossition = position;
btMinus.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
ViewHolder deleteHolder = (ViewHolder) v.getTag();
//
int pos = deleteHolder.fieldpossition;
Log.v("Position id", "" + position);
et.setText("Test Text");
notifyDataSetChanged();
} catch (Exception e) {
Log.e("error", "error" + e.getMessage());
}
}
});
tv.setText(mDescription.get(position).toString());
btMinus.setTag(holder);
return v;
}