我正在尝试保存或从包含ListView
的{{1}}获取数据。
当我尝试保存或从屏幕大小超过EditText
的数据中获取数据时,我收到错误消息。我知道为什么,但不知道如何解决它。原因是他们重用了这些观点。
以下是我想要做的例子。如果屏幕上有5行,屏幕上有1行,我怎样才能引用第6行?
ListView
我将数据存储在 public void saveData(){
StringBuffer buffer = new StringBuffer();
int count = listView.getCount();
for(int i=0 ;i < count ;i++) {
View child = listView.getChildAt(i);
TextView setText1 = (TextView)child.findViewById(R.id.TextView1);
EditText text = (EditText) child.findViewById(R.id.setText1);
String content1 = setText1.getText().toString().trim();
String content2 = text.getText().toString().trim();
buffer.append(content1);
buffer.append(",");
buffer.append(content2);
buffer.append(",");
}
。
Stringbuffer
这是logcat。 引起:
public class CustomAdapter extends ArrayAdapter<String> {
public CustomAdapter(Context context, List<String> num_set ) {
super(context, R.layout.custom_row ,num_set );
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View CustomView = inflater.inflate(R.layout.custom_row ,parent , false);
String[] num = getItem(position).split(",");
TextView setText1 = (TextView)CustomView.findViewById(R.id.TextView1);
EditText setText2 =(EditText)CustomView.findViewById(R.id.setText2);
setText1.setText(num[0]);
setText2.setText(num[1]);
return CustomView;
}
}
这是java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
custom_row.xml
答案 0 :(得分:0)
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
使用addtext listner并在edittext中编写数据时保存,以便获得特定数据。
答案 1 :(得分:0)
您应该将数据与视图分开。因为使用ListViews,不在屏幕上的行实际上不存在!如果您连续输入某些内容,则将其滚出屏幕,然后再次注意到文本已消失。
我建议您使用类似Arjun's answer的内容将数据保存在某处的onTextChanged中。这样,您也可以在滚动进出时再次恢复文本。
我也看到你没有使用行重用(使用适配器的convertView参数)。我建议你也阅读它,也进入ViewHolder模式,因为你每次都在构建一个新行