【发布时间】:2020-06-05 16:32:16
【问题描述】:
我需要你们的帮助,任何人都可以解决这个问题我正在尝试将三行插入到 mysql 表中,但是这里只有两行可见,第三行在向下滚动时可见,所以当我点击提交时,它会让我错误它在屏幕上插入 2 个可见行并在不可见的 3 行上抛出一个空指针期望有人可以帮助我从不可见的视图中获取数据我知道它的 recyclerview 并且它重新使用视图我知道机制我只是想要一些解决方案,以便可以将不可见的 3 行成功添加到数据库中
这是一张图片:
我的 recyclerview 适配器代码:
public class MyAdapterClosing extends RecyclerView.Adapter<MyAdapterClosing.myViewHolder> {
private Context context;
private List<DataofClosing> student;
public MyAdapterClosing(Context context, List<DataofClosing> student){
this.context = context;
this.student = student;
}
@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layoutclosing,parent,false);
return new myViewHolder(itemView);
}
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
DataofClosing s = student.get(position);
holder.brand.setText(s.Brandname);
}
public void updateList(List<RecyclerviewWholesale> student)
{
student = student;
notifyDataSetChanged();
}
public void addItem(int position, DataofClosing stud)
{
student.add(position, stud);
notifyItemInserted(position);
}
public void removeItem(int position) {
student.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, student.size());
}
@Override
public int getItemCount() {
return student.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
public class myViewHolder extends RecyclerView.ViewHolder{
TextView brand;
EditText qts,pts,nip,ml90;
public myViewHolder(View itemView) {
super(itemView);
brand = (TextView) itemView.findViewById(R.id.brand);
qts = (EditText) itemView.findViewById(R.id.qts);
pts = (EditText) itemView.findViewById(R.id.pts);
nip = (EditText) itemView.findViewById(R.id.nip);
ml90 = (EditText) itemView.findViewById(R.id.ml90);
String qtss = qts.getText().toString();
String ptss = pts.getText().toString();
String nipp = nip.getText().toString();
String ml900 = ml90.getText().toString();
DataofClosing dataofClosing = new DataofClosing();
dataofClosing.qts = qtss;
dataofClosing.pts = ptss;
dataofClosing.nip = nipp;
dataofClosing.ml90 = ml900;
}
}
}
在主Activity中插入代码是:
class Insertclosing extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* Creating product
*/
protected String doInBackground(String... args) {
for (int i = 0; i < mAdapter.getItemCount(); i++) {
rcData = data.get(i);
View view1 = closingService.getChildAt(i);
EditText nameEditText = (EditText) view1.findViewById(R.id.qts);
String name = nameEditText.getText().toString();
EditText ptss = (EditText) view1.findViewById(R.id.pts);
String pts = ptss.getText().toString();
EditText nipp = (EditText) view1.findViewById(R.id.nip);
String nip = nipp.getText().toString();
EditText ml900 = (EditText) view1.findViewById(R.id.ml90);
String ml90 = ml900.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("brand", rcData.Brandname));
params.add(new BasicNameValuePair("quantity", name));
params.add(new BasicNameValuePair("discount",pts));
params.add(new BasicNameValuePair("ammount",nip ));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_insert_product_sales,
"POST", params);
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
/*runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(ChangeAddress.this, "Order Placed Successfully", Toast.LENGTH_SHORT).show();
}
});*/
} else {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(closing.this, "Try Again", Toast.LENGTH_SHORT).show();
}
}); // failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
**/
protected void onPostExecute(String file_url) {
Toast.makeText(closing.this, "Closing added Successfully", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
要拥有RecyclerView,你需要将所有数据都放在
List<DataofClosing>,那为什么不直接从列表中获取数据,而不是从RecyclerView中获取呢? -
你试过用
包裹它吗? -
我没有从列表中获取数据,因为当列表出现时,每个项目都有 4 个编辑文本,我必须将其填满,然后将其保存到数据库中,这就是为什么任何解决方案的原因。 @ZeekHuge
-
如果我用滚动视图把它包起来会发生什么
-
@SachinLatiyan 你有解决这个问题的办法吗??
标签: android android-recyclerview