从 linearLayout 中动态生成的多个微调器获取数据
Get data from multiple spinners generated dynamically in linearLayout
我正在尝试在我的 LinearLayout 中添加一个动态视图,并且 正在尝试实现类似捕获与时间对应的每个微调器值的东西 。这里的任何人都可以指导我如何完成。 我正在尝试,但它无法正常工作,因为根据点击“添加文件”按钮可以有无限多的行和微调器。我需要从每个旋转器收集值,然后需要创建一个数组。
这是我的代码 :
public class MainActivity extends Activity {
private LinearLayout parentLinearLayout;
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parentLinearLayout=(LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v) {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView=inflater.inflate(R.layout.container_item, null);
final EditText text1 = (EditText) rowView.findViewById(R.id.number_edit_text);
final EditText text2 = (EditText) rowView.findViewById(R.id.number_edit_text2);
final EditText text3 = (EditText) rowView.findViewById(R.id.number_edit_text3);
text1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
text3.setText(text1.getText().toString());
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
int val = Integer.parseInt(text1.getText().toString());
int val2 = Integer.parseInt(text2.getText().toString());
if(val2>val)
{
}else{
int finalval=val-val2;
text3.setText(""+finalval);
}
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text3.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}
public void onDelete(View v) {
parentLinearLayout.removeView((View) v.getParent());
}
public void onGetField(View v){
int count = parentLinearLayout.getChildCount();
for (int i = 0; i < count; i++) {
final View row = parentLinearLayout.getChildAt(i);
EditText textOut = (EditText) row.findViewById(R.id.number_edit_text);
String data = textOut.getText().toString();
Toast.makeText(this,""+data,Toast.LENGTH_LONG).show();
}
}
}
动态视图XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<EditText
android:id="@+id/number_edit_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<EditText
android:id="@+id/number_edit_text2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<EditText
android:id="@+id/number_edit_text3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<Spinner
android:id="@+id/type_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".3"
android:entries="@array/types"
android:gravity="right" />
<Button
android:id="@+id/delete_button"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight=".1"
android:background="@android:drawable/ic_delete"
android:onClick="onDelete"/>
</LinearLayout>
主要XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/parent_linear_layout"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
<Button
android:id="@+id/add_field_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="#555"
android:layout_gravity="center"
android:onClick="onAddField"
android:textColor="#FFF"
android:text="Add Field"
android:paddingLeft="5dp"/>
<Button
android:id="@+id/get_field_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="#555"
android:layout_gravity="center"
android:onClick="onGetField"
android:textColor="#FFF"
android:text="Get Field"
android:paddingLeft="5dp"/>
</LinearLayout>
请让我知道您对此的宝贵建议。我从最后一天就卡住了。
这是附加的图片,在图片中你可以看到第三个编辑文本是空的,我需要在第一个上使用文本观察器填充它,两个编辑文本,如 2(first edit-text)-1(第二个编辑文本)= 1(第三个编辑文本)。
此致
下面是第二种使用 Recyclerview 的方法:
MainActivity:
public class MainActivity extends AppCompatActivity {
int position=0;
List<Container_Add_model> main_modelList = new ArrayList<>();
RecyclerView recyclerView_container;
TextView Tv_add_container;
Container_Add_Adapter rvAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView_container = findViewById(R.id.recyclerView_container);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView_container.setLayoutManager(layoutManager);
Tv_add_container = findViewById(R.id.Tv_add_container);
rvAdapter = new Container_Add_Adapter(MainActivity.this, main_modelList,this, new Container_Add_Adapter.Onclick() {
@Override
public void onEvent(Container_Add_model model, int pos) {
}
});
recyclerView_container.setAdapter(rvAdapter);
Tv_add_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rvAdapter.addClick();
}
});
}
适配器Class:
public class Container_Add_Adapter extends RecyclerView.Adapter<Container_Add_Adapter.RvViewHolder> {
Activity context;
List<Container_Add_model> models;
Onclick onclick;
View view;
EditTextAdded editTextAdded;
private int container_number_pending, container_number_taken, container_number_given;
public Container_Add_Adapter(Activity context, List<Container_Add_model> models,EditTextAdded editTextAdded, Onclick onclick) {
this.context = context;
this.models = models;
this.editTextAdded = editTextAdded;
this.onclick = onclick;
}
@Override
public Container_Add_Adapter.RvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
view = inflater.from(parent.getContext()).inflate(R.layout.container_item, parent, false);
RvViewHolder rvViewHolder = new RvViewHolder(view);
return rvViewHolder;
}
@Override
public void onBindViewHolder(final Container_Add_Adapter.RvViewHolder holder, final int position) {
final Container_Add_model model = models.get(position);
holder.Edttxt_given_container.setText(models.get(position).container_given+"");
holder.Edttxt_given_container.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
// models.get(position).container_given = Integer.valueOf(s.toString());
}
}
});
holder.Edttxt_taken_container.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() != 0) {
if (!holder.Edttxt_given_container.getText().toString().isEmpty()) {
container_number_given = Integer.parseInt(holder.Edttxt_given_container.getText().toString());
int number = container_number_given + container_number_pending;
int input_num = Integer.parseInt(s.toString());
if (number >= input_num) {
container_number_taken = Integer.parseInt(holder.Edttxt_taken_container.getText().toString());
int final_num = number - container_number_taken;
holder.Edttxt_Pending_container.setText("" + final_num);
} else {
holder.Edttxt_taken_container.setText("");
}
} else {
holder.Edttxt_taken_container.setText("");
}
} else {
if (!holder.Edttxt_given_container.getText().toString().isEmpty()) {
container_number_given = Integer.parseInt(holder.Edttxt_given_container.getText().toString());
if (container_number_given > 0) {
int finalnum = container_number_given + container_number_pending;
holder.Edttxt_Pending_container.setText("" + finalnum);
} else {
holder.Edttxt_Pending_container.setText("" + container_number_pending);
}
} else {
holder.Edttxt_Pending_container.setText("" + container_number_pending);
}
}
}
});
holder.Iv_delete_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
models.remove(position);
notifyItemChanged(position);
notifyItemRangeChanged (position, models.size());
}
});
}
public void addClick(){
Container_Add_model container_main_model = new Container_Add_model();
container_main_model.setContainer_given(0);
container_main_model.setContainer_pending(0);
container_main_model.setContainer_taken(0);
container_main_model.setContainer_id(models.size());
container_main_model.setContainer_name("");
models.add(container_main_model);
//notifyDataSetChanged(models);
notifyItemInserted(models.size() + 1);
}
@Override
public int getItemCount() {
return models.size();
}
public interface Onclick {
void onEvent(Container_Add_model model, int pos);
}
public class RvViewHolder extends RecyclerView.ViewHolder {
TextView Tv_container_type;
EditText Edttxt_given_container, Edttxt_taken_container, Edttxt_Pending_container;
LinearLayout llItem;
ImageView Iv_delete_container;
public RvViewHolder(View itemView) {
super(itemView);
Tv_container_type = itemView.findViewById(R.id.Tv_container_type);
Iv_delete_container = itemView.findViewById(R.id.Iv_delete_container);
Edttxt_given_container = itemView.findViewById(R.id.Edttxt_given_container);
Edttxt_Pending_container = itemView.findViewById(R.id.Edttxt_Pending_container);
Edttxt_taken_container = itemView.findViewById(R.id.Edttxt_taken_container);
}
}
}
将您的 String 数组转换为 ArrayList 并将其传递给 Adapter 并使用以下代码或使用您的 String[] 更改以下代码。
您需要为您的适配器实现 Filterable class 并覆盖 getFilter()
public class ListFilterActivity extends ListActivity {
private List<String> list = new ArrayList<String>();
List<String> mOriginalValues;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyAdapter adapter = new MyAdapter(this, getModel());
setListAdapter(adapter);
EditText filterEditText = (EditText) findViewById(R.id.filterText);
// Add Text Change Listener to EditText
filterEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Call back the Adapter with current character to Filter
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private List<String> getModel() {
list.add("Linux");
list.add("Windows7");
list.add("Suse");
list.add("Eclipse");
list.add("Ubuntu");
list.add("Solaris");
list.add("Android");
list.add("iPhone");
list.add("Windows XP");
return list;
}
}
// Adapter Class
public class MyAdapter extends BaseAdapter implements Filterable {
List<String> arrayList;
List<String> mOriginalValues; // Original Values
LayoutInflater inflater;
public MyAdapter(Context context, List<String> arrayList) {
this.arrayList = arrayList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder {
TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.row, null);
holder.textView = (TextView) convertView
.findViewById(R.id.textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(arrayList.get(position));
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
arrayList = (List<String>) results.values; // has the filtered values
notifyDataSetChanged(); // notifies the data with new filtered values
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults(); // Holds the results of a filtering operation in values
List<String> FilteredArrList = new ArrayList<String>();
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<String>(arrayList); // saves the original data in mOriginalValues
}
/********
*
* If constraint(CharSequence that is received) is null returns the mOriginalValues(Original) values
* else does the Filtering and returns FilteredArrList(Filtered)
*
********/
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalValues.size(); i++) {
String data = mOriginalValues.get(i);
if (data.toLowerCase().startsWith(constraint.toString())) {
FilteredArrList.add(data);
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
}
这是你遗漏的 :
public class MainActivity extends Activity {
private LinearLayout parentLinearLayout;
private ArrayList<> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parentLinearLayout=(LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v) {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView=inflater.inflate(R.layout.container_item, null);
final EditText text1 = (EditText) rowView.findViewById(R.id.number_edit_text);
final EditText text2 = (EditText) rowView.findViewById(R.id.number_edit_text2);
final EditText text3 = (EditText) rowView.findViewById(R.id.number_edit_text3);
final Spinner mSpinner = (Spinner) rowView.findViewById(R.id.type_spinner);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
String selectedDiv = parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, ""+selectedDiv, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
// can leave this empty
}
});
text1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
text3.setText(text1.getText().toString());
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
int val = Integer.parseInt(text1.getText().toString());
int val2 = Integer.parseInt(text2.getText().toString());
if(val2>val)
{
}else{
int finalval=val-val2;
text3.setText(""+finalval);
}
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text3.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}
public void onDelete(View v) {
parentLinearLayout.removeView((View) v.getParent());
}
public void onGetField(View v){
mList = new ArrayList<>();
int count = parentLinearLayout.getChildCount();
for (int i = 0; i < count; i++) {
final View row = parentLinearLayout.getChildAt(i);
EditText textOut = (EditText) row.findViewById(R.id.number_edit_text);
EditText textOut2 = (EditText) row.findViewById(R.id.number_edit_text2);
EditText textOut3 = (EditText) row.findViewById(R.id.number_edit_text3);
Spinner spinner = (Spinner)row.findViewById(R.id.type_spinner);
mList.add(new DataList( textOut.getText().toString(),
textOut2.getText().toString()
, textOut3.getText().toString(),spinner.getSelectedItem().toString()
));
}
}
}
数据列表模型 :
public class DataList {
public String given;
public String taken;
public String pending;
public String spinnerItemSelected;
public DataList(String given, String taken, String pending, String spinnerItemSelected) {
this.given = given;
this.taken = taken;
this.pending = pending;
this.spinnerItemSelected = spinnerItemSelected;
}
}
我正在尝试在我的 LinearLayout 中添加一个动态视图,并且 正在尝试实现类似捕获与时间对应的每个微调器值的东西 。这里的任何人都可以指导我如何完成。 我正在尝试,但它无法正常工作,因为根据点击“添加文件”按钮可以有无限多的行和微调器。我需要从每个旋转器收集值,然后需要创建一个数组。
这是我的代码 :
public class MainActivity extends Activity {
private LinearLayout parentLinearLayout;
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parentLinearLayout=(LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v) {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView=inflater.inflate(R.layout.container_item, null);
final EditText text1 = (EditText) rowView.findViewById(R.id.number_edit_text);
final EditText text2 = (EditText) rowView.findViewById(R.id.number_edit_text2);
final EditText text3 = (EditText) rowView.findViewById(R.id.number_edit_text3);
text1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
text3.setText(text1.getText().toString());
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
int val = Integer.parseInt(text1.getText().toString());
int val2 = Integer.parseInt(text2.getText().toString());
if(val2>val)
{
}else{
int finalval=val-val2;
text3.setText(""+finalval);
}
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text3.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}
public void onDelete(View v) {
parentLinearLayout.removeView((View) v.getParent());
}
public void onGetField(View v){
int count = parentLinearLayout.getChildCount();
for (int i = 0; i < count; i++) {
final View row = parentLinearLayout.getChildAt(i);
EditText textOut = (EditText) row.findViewById(R.id.number_edit_text);
String data = textOut.getText().toString();
Toast.makeText(this,""+data,Toast.LENGTH_LONG).show();
}
}
}
动态视图XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<EditText
android:id="@+id/number_edit_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<EditText
android:id="@+id/number_edit_text2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<EditText
android:id="@+id/number_edit_text3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".2"
android:inputType="phone"/>
<Spinner
android:id="@+id/type_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".3"
android:entries="@array/types"
android:gravity="right" />
<Button
android:id="@+id/delete_button"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight=".1"
android:background="@android:drawable/ic_delete"
android:onClick="onDelete"/>
</LinearLayout>
主要XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/parent_linear_layout"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
<Button
android:id="@+id/add_field_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="#555"
android:layout_gravity="center"
android:onClick="onAddField"
android:textColor="#FFF"
android:text="Add Field"
android:paddingLeft="5dp"/>
<Button
android:id="@+id/get_field_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="#555"
android:layout_gravity="center"
android:onClick="onGetField"
android:textColor="#FFF"
android:text="Get Field"
android:paddingLeft="5dp"/>
</LinearLayout>
请让我知道您对此的宝贵建议。我从最后一天就卡住了。
这是附加的图片,在图片中你可以看到第三个编辑文本是空的,我需要在第一个上使用文本观察器填充它,两个编辑文本,如 2(first edit-text)-1(第二个编辑文本)= 1(第三个编辑文本)。
此致
下面是第二种使用 Recyclerview 的方法:
MainActivity:
public class MainActivity extends AppCompatActivity {
int position=0;
List<Container_Add_model> main_modelList = new ArrayList<>();
RecyclerView recyclerView_container;
TextView Tv_add_container;
Container_Add_Adapter rvAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView_container = findViewById(R.id.recyclerView_container);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView_container.setLayoutManager(layoutManager);
Tv_add_container = findViewById(R.id.Tv_add_container);
rvAdapter = new Container_Add_Adapter(MainActivity.this, main_modelList,this, new Container_Add_Adapter.Onclick() {
@Override
public void onEvent(Container_Add_model model, int pos) {
}
});
recyclerView_container.setAdapter(rvAdapter);
Tv_add_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rvAdapter.addClick();
}
});
}
适配器Class:
public class Container_Add_Adapter extends RecyclerView.Adapter<Container_Add_Adapter.RvViewHolder> {
Activity context;
List<Container_Add_model> models;
Onclick onclick;
View view;
EditTextAdded editTextAdded;
private int container_number_pending, container_number_taken, container_number_given;
public Container_Add_Adapter(Activity context, List<Container_Add_model> models,EditTextAdded editTextAdded, Onclick onclick) {
this.context = context;
this.models = models;
this.editTextAdded = editTextAdded;
this.onclick = onclick;
}
@Override
public Container_Add_Adapter.RvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
view = inflater.from(parent.getContext()).inflate(R.layout.container_item, parent, false);
RvViewHolder rvViewHolder = new RvViewHolder(view);
return rvViewHolder;
}
@Override
public void onBindViewHolder(final Container_Add_Adapter.RvViewHolder holder, final int position) {
final Container_Add_model model = models.get(position);
holder.Edttxt_given_container.setText(models.get(position).container_given+"");
holder.Edttxt_given_container.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
// models.get(position).container_given = Integer.valueOf(s.toString());
}
}
});
holder.Edttxt_taken_container.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() != 0) {
if (!holder.Edttxt_given_container.getText().toString().isEmpty()) {
container_number_given = Integer.parseInt(holder.Edttxt_given_container.getText().toString());
int number = container_number_given + container_number_pending;
int input_num = Integer.parseInt(s.toString());
if (number >= input_num) {
container_number_taken = Integer.parseInt(holder.Edttxt_taken_container.getText().toString());
int final_num = number - container_number_taken;
holder.Edttxt_Pending_container.setText("" + final_num);
} else {
holder.Edttxt_taken_container.setText("");
}
} else {
holder.Edttxt_taken_container.setText("");
}
} else {
if (!holder.Edttxt_given_container.getText().toString().isEmpty()) {
container_number_given = Integer.parseInt(holder.Edttxt_given_container.getText().toString());
if (container_number_given > 0) {
int finalnum = container_number_given + container_number_pending;
holder.Edttxt_Pending_container.setText("" + finalnum);
} else {
holder.Edttxt_Pending_container.setText("" + container_number_pending);
}
} else {
holder.Edttxt_Pending_container.setText("" + container_number_pending);
}
}
}
});
holder.Iv_delete_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
models.remove(position);
notifyItemChanged(position);
notifyItemRangeChanged (position, models.size());
}
});
}
public void addClick(){
Container_Add_model container_main_model = new Container_Add_model();
container_main_model.setContainer_given(0);
container_main_model.setContainer_pending(0);
container_main_model.setContainer_taken(0);
container_main_model.setContainer_id(models.size());
container_main_model.setContainer_name("");
models.add(container_main_model);
//notifyDataSetChanged(models);
notifyItemInserted(models.size() + 1);
}
@Override
public int getItemCount() {
return models.size();
}
public interface Onclick {
void onEvent(Container_Add_model model, int pos);
}
public class RvViewHolder extends RecyclerView.ViewHolder {
TextView Tv_container_type;
EditText Edttxt_given_container, Edttxt_taken_container, Edttxt_Pending_container;
LinearLayout llItem;
ImageView Iv_delete_container;
public RvViewHolder(View itemView) {
super(itemView);
Tv_container_type = itemView.findViewById(R.id.Tv_container_type);
Iv_delete_container = itemView.findViewById(R.id.Iv_delete_container);
Edttxt_given_container = itemView.findViewById(R.id.Edttxt_given_container);
Edttxt_Pending_container = itemView.findViewById(R.id.Edttxt_Pending_container);
Edttxt_taken_container = itemView.findViewById(R.id.Edttxt_taken_container);
}
}
}
将您的 String 数组转换为 ArrayList 并将其传递给 Adapter 并使用以下代码或使用您的 String[] 更改以下代码。
您需要为您的适配器实现 Filterable class 并覆盖 getFilter()
public class ListFilterActivity extends ListActivity {
private List<String> list = new ArrayList<String>();
List<String> mOriginalValues;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyAdapter adapter = new MyAdapter(this, getModel());
setListAdapter(adapter);
EditText filterEditText = (EditText) findViewById(R.id.filterText);
// Add Text Change Listener to EditText
filterEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Call back the Adapter with current character to Filter
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private List<String> getModel() {
list.add("Linux");
list.add("Windows7");
list.add("Suse");
list.add("Eclipse");
list.add("Ubuntu");
list.add("Solaris");
list.add("Android");
list.add("iPhone");
list.add("Windows XP");
return list;
}
}
// Adapter Class
public class MyAdapter extends BaseAdapter implements Filterable {
List<String> arrayList;
List<String> mOriginalValues; // Original Values
LayoutInflater inflater;
public MyAdapter(Context context, List<String> arrayList) {
this.arrayList = arrayList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder {
TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.row, null);
holder.textView = (TextView) convertView
.findViewById(R.id.textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(arrayList.get(position));
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
arrayList = (List<String>) results.values; // has the filtered values
notifyDataSetChanged(); // notifies the data with new filtered values
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults(); // Holds the results of a filtering operation in values
List<String> FilteredArrList = new ArrayList<String>();
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<String>(arrayList); // saves the original data in mOriginalValues
}
/********
*
* If constraint(CharSequence that is received) is null returns the mOriginalValues(Original) values
* else does the Filtering and returns FilteredArrList(Filtered)
*
********/
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalValues.size(); i++) {
String data = mOriginalValues.get(i);
if (data.toLowerCase().startsWith(constraint.toString())) {
FilteredArrList.add(data);
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
}
这是你遗漏的 :
public class MainActivity extends Activity {
private LinearLayout parentLinearLayout;
private ArrayList<> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parentLinearLayout=(LinearLayout) findViewById(R.id.parent_linear_layout);
}
public void onAddField(View v) {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView=inflater.inflate(R.layout.container_item, null);
final EditText text1 = (EditText) rowView.findViewById(R.id.number_edit_text);
final EditText text2 = (EditText) rowView.findViewById(R.id.number_edit_text2);
final EditText text3 = (EditText) rowView.findViewById(R.id.number_edit_text3);
final Spinner mSpinner = (Spinner) rowView.findViewById(R.id.type_spinner);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
String selectedDiv = parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, ""+selectedDiv, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
// can leave this empty
}
});
text1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
text3.setText(text1.getText().toString());
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
int val = Integer.parseInt(text1.getText().toString());
int val2 = Integer.parseInt(text2.getText().toString());
if(val2>val)
{
}else{
int finalval=val-val2;
text3.setText(""+finalval);
}
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
text3.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.length() > 0) {
Toast.makeText(MainActivity.this,""+s.toString(),Toast.LENGTH_LONG).show();
}
}
});
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}
public void onDelete(View v) {
parentLinearLayout.removeView((View) v.getParent());
}
public void onGetField(View v){
mList = new ArrayList<>();
int count = parentLinearLayout.getChildCount();
for (int i = 0; i < count; i++) {
final View row = parentLinearLayout.getChildAt(i);
EditText textOut = (EditText) row.findViewById(R.id.number_edit_text);
EditText textOut2 = (EditText) row.findViewById(R.id.number_edit_text2);
EditText textOut3 = (EditText) row.findViewById(R.id.number_edit_text3);
Spinner spinner = (Spinner)row.findViewById(R.id.type_spinner);
mList.add(new DataList( textOut.getText().toString(),
textOut2.getText().toString()
, textOut3.getText().toString(),spinner.getSelectedItem().toString()
));
}
}
}
数据列表模型 :
public class DataList {
public String given;
public String taken;
public String pending;
public String spinnerItemSelected;
public DataList(String given, String taken, String pending, String spinnerItemSelected) {
this.given = given;
this.taken = taken;
this.pending = pending;
this.spinnerItemSelected = spinnerItemSelected;
}
}