나는 안드로이드를 처음 접했고 간단한 재고 테이크 앱으로 놀아서이 문제를 해결했습니다 :키보드를 열면 Android TextViews가 지워 집니까?
"재고 세트"화면에서 제품 목록과 현재 재고가 데이터베이스에서 수집됩니다 프로그래밍 방식으로 생성 된 TextViews의 2 열로 표시됩니다.
데이터베이스에서 잡고 activity_set.xml에 빈의 ListView에 그것을 박았에서 onCreate 방법 :
public class SetActivity extends AppCompatActivity{
private static final String TAG = "SetActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set);
ArrayList<Product> stock = Products.retrieveProducts(this);
final ListView mListView = (ListView) findViewById(setList);
ProductEditAdapter adapter = new ProductEditAdapter(this,R.layout.adapter_set_layout, stock);
mListView.setAdapter(adapter);
}
이 ProductEditAdapter 클래스
을 :public class ProductEditAdapter extends ArrayAdapter<Product> {
private static final String TAG = "ProductEditAdapter";
private Context mContext;
int mResource;
public ProductEditAdapter(Context context, int resource, ArrayList<Product> objects){
super(context,resource,objects);
mContext = context;
mResource = resource;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String name = getItem(position).getName();
int stock = getItem(position).getStock();
Product product = new Product(name,stock);
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(mResource, parent, false);
TextView tvName = (TextView) convertView.findViewById(R.id.pie_name);
TextView tvCurrentStock = (TextView) convertView.findViewById(R.id.current_stock);
tvCurrentStock.setText(String.valueOf(stock));
tvName.setText(name + ":");
tvCurrentStock.setTag(name);
return convertView;
}
}
adapter_set_layout.xml이가 생성되는 로 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/adapsetLayout"
android:weightSum="100">
<TextView
android:gravity="center"
android:textAlignment="center"
android:text="TextView1"
android:layout_width="match_parent"
android:layout_height="45dp"
android:id="@+id/pie_name"
android:layout_weight="20"
android:textColor="#000000"
android:textStyle="bold"
/>
<TextView
android:gravity="center"
android:textAlignment="center"
android:text="TextView1"
android:layout_width="match_parent"
android:layout_height="45dp"
android:id="@+id/current_stock"
android:layout_weight="80"
android:textColor="#000000"
android:textStyle="bold"
android:onClick="onClick"
android:clickable="true"
/>
</LinearLayout>
당신이 항목의 주식을 클릭하면이 popu을 부여하고 p를 눌러 새 번호를 입력 한 다음 "확인"을 클릭하여 TextView를 업데이트하거나 "취소"를 클릭하여 수정할 수 있습니다.
모든 TextViews를 구문 분석하고 데이터베이스의 각 제품의 재고 번호를 새 값으로 업데이트하는 제출 버튼이 있습니다.
변경된 TextView 값은 제출을 기다릴 때까지 일시적이며 화면을 떠날 때 원래 값으로 돌아갑니다. SetActivity에서
는온 클릭 방법 :
이public void onClick(View v){
if(v.getId()==R.id.submitButton) {
confirmDialog();
}
else if(v.getId()==R.id.current_stock) {
LinearLayout parent = (LinearLayout) v.getParent();
final TextView pie_stock_view = (TextView) parent.findViewById(current_stock);
final TextView pie_name_view = (TextView) parent.findViewById(pie_name);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(pie_name_view.getText().toString());
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
pie_stock_view.setText(input.getText().toString());
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
else if(v.getId()==R.id.resetButton) {
resetDialog();
}
}
앱이 에뮬레이터에서 완벽하게 작동합니다 - 당신이 재고 번호를 클릭하고 상자가 그냥 바탕 화면 키보드로 입력하고 확인, 업데이트를 클릭하면, 팝업 때 제출하기 전에 원하는만큼의 가치를 제공하십시오.
실제 장치의 문제는 상자가 튀어 나와서 화면 키보드가 튀어 나오면 모든 업데이트 된 값이 해당 컴퓨터로 다시 설정되므로 활동을 떠나는 것으로 생각됩니다. 생성 된 값, 어떤 제안을 어떻게 방지 할 수 있습니까?.