I have the following error: I have a list and a field, every time I edit any edit text from the list, it loses focus and goes to the top of the screen, note the gif that every letter of the word "test "edittext loses and gains focus, but the first does not give a problem because it is already at the top of the list, now the others that are below the first give ...
Activity Code
public class CategoriaListActivity extends ActionBarActivity {
private Categoria categoria = new Categoria();
private ListView listView;
Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence titles[] = {"Receita", "Despesa"};
int numTabs = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categoria_list);
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Window window = getWindow();
adapter = new ViewPagerAdapter(getSupportFragmentManager(), titles, numTabs);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(getResources().getColor(R.color.color_black));
}
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true);
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.tabsScrollColor);
}
});
tabs.setViewPager(pager);
//refreshLista();
}
public void addCategoriaDespesa(View view) {
final EditText etCatDes = (EditText)
findViewById(R.id.etCateg);
ImageButton btCatDes = (ImageButton)
findViewById(R.id.btAdd);
if(etCatDes.getText().toString().length() == 0){
etCatDes.setError("Campo obrigatório");
return;
}
categoria.setNome(etCatDes.getText().toString());
categoria.setDespesa(1);
CategoriaDAO categoriaDAO = new CategoriaDAO(this);
categoriaDAO.inserir(categoria);
Toast.makeText(this, "Categoria adicionada!", Toast.LENGTH_SHORT).show();
etCatDes.setText("");
refreshLista(1);
}
public void addCategoriaReceita(View view) {
final EditText etCatRec = (EditText)
findViewById(R.id.etCategR);
ImageButton btCatRec = (ImageButton)
findViewById(R.id.btAdd);
if (etCatRec.getText().toString().length() == 0) {
etCatRec.setError("Campo obrigatório");
return;
}
categoria.setNome(etCatRec.getText().toString());
categoria.setDespesa(0);
CategoriaDAO categoriaDAO = new CategoriaDAO(this);
categoriaDAO.inserir(categoria);
Toast.makeText(this, "Categoria adicionada!", Toast.LENGTH_SHORT).show();
refreshLista(0);
etCatRec.setText("");
}
public void refreshLista(int despesa) {
CategoriaDAO categoria = new CategoriaDAO(this);
List<Categoria> list = categoria.getLista(despesa);
ListView listView;
if (despesa == 1) {
listView = (ListView) this.findViewById(R.id.listaDes);
}else {
listView = (ListView) this.findViewById(android.R.id.list);
}
CategoriaAdapter catAd = new CategoriaAdapter(this, list, listView);
listView.setAdapter(catAd);
}
/* @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_categoria_list, menu);
return true;
}*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
overridePendingTransition(R.anim.pull_in_left, R.anim.push_out_right);
return true;
}
return super.onOptionsItemSelected(item);
}
}
Edited .
Activity xml
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
xmlns:android="http://schemas.android.com/apk/res/android">
<include
android:id="@+id/app_bar"
layout="@layout/app_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<com.prjctt.allan.newfinance.SlidingTabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/ColorPrimary"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
Fragment and Fragment xml that treats this part of the gif
public class CategoriaReceita extends Fragment {
Categoria categoria;
EditText etCat;
ImageButton addCat;
public CategoriaReceita() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_categoria_receita, container, false);
addCat = (ImageButton) v.findViewById(R.id.btAddR);
etCat = (EditText) v.findViewById(R.id.etCategR);
refreshLista(v);
return v;
}
public void refreshLista(View layout) {
CategoriaDAO categoria = new CategoriaDAO(this.getActivity());
List<Categoria> list = categoria.getLista(0);
ListView listView = (ListView) layout.findViewById(android.R.id.list);
CategoriaAdapter catAd = new CategoriaAdapter(this.getActivity(), list, listView);
listView.setAdapter(catAd);
}
}
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.prjctt.allan.newfinance.CategoriaReceita">
<android.support.v7.widget.CardView
android:id="@+id/some_card_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:background="#cccccc">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:inputType="textCapSentences"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/etCategR"
android:hint="Adicione uma categoria"
android:layout_weight="4"
android:layout_margin="8dp" />
<ImageButton
android:src="@drawable/ic_action_newc"
android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Adicionar"
android:id="@+id/btAddR"
android:onClick="addCategoriaReceita"
android:layout_weight="1"
android:layout_marginTop="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp" />
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id="@+id/some_card_view1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:background="#cccccc">
<ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@android:id/list" />
</android.support.v7.widget.CardView>
Adapter and xml related to list of categories
public class CategoriaAdapter extends BaseAdapter {
private Context context;
List<Categoria> lista;
private ListView listView;
private SubCategoria subcategoria = new SubCategoria();
private TextView lvPai;
public CategoriaAdapter(Context context, List<Categoria> lista, ListView listView) {
this.context = context;
this.lista = lista;
this.listView = listView;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Object getItem(int position) {
return lista.get(position);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
final int auxPosition = position;
final Categoria categoria = new Categoria();
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final CardView layout = (CardView)
inflater.inflate(R.layout.categoria_row, null);
final TextView categ = (TextView)
layout.findViewById(R.id.tvCat);
categ.setText(lista.get(position).getNome());
final EditText etsubcat = (EditText)
layout.findViewById(R.id.etSubCat);
final ImageButton btaddsub = (ImageButton)
layout.findViewById(R.id.btAddSubCat);
etsubcat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
etsubcat.requestFocus();
}
});
btaddsub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Categoria cat = (Categoria) getItem(position);
subcategoria.setNome(etsubcat.getText().toString());
subcategoria.setIdCategoria(cat.getId());
SubCategoriaDAO subCategoriaDAO = new SubCategoriaDAO(context);
if(etsubcat.getText().toString().length() == 0) {
etsubcat.setError("Campo obrigatório");
}else {
subCategoriaDAO.inserir(subcategoria);
Toast.makeText(context, "Subcategoria adicionada!", Toast.LENGTH_SHORT ).show();
etsubcat.setText("");
lvPai = (TextView) layout.findViewById(R.id.tvCat);
List<SubCategoria> list = subCategoriaDAO.getLista(lvPai.getText().toString());
ListView listView = (ListView) layout.findViewById(android.R.id.list);
/*ViewGroup.LayoutParams params =listView.getLayoutParams();
params.height = list.size() * 42;
listView.setLayoutParams(params);
listView.requestLayout();*/
listView.setAdapter(new SubCategoriaAdapter(context, list, listView));
}
}
});
listView.setDivider(null);
lvPai = (TextView) layout.findViewById(R.id.tvCat);
SubCategoriaDAO subcategoria = new SubCategoriaDAO(context);
List<SubCategoria> list = subcategoria.getLista(lvPai.getText().toString());
ListView listView = (ListView) layout.findViewById(android.R.id.list);
listView.setAdapter(new SubCategoriaAdapter(context, list, listView));
return layout;
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/some_card_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:background="#cccccc">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_margin="8dp"
android:text="Large Text"
android:id="@+id/tvCat" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etSubCat"
android:inputType="textCapSentences"
android:layout_alignBottom="@+id/btAddSubCat"
android:layout_alignLeft="@+id/tvCat"
android:layout_alignStart="@+id/tvCat"
android:layout_toLeftOf="@+id/btAddSubCat"
android:layout_toStartOf="@+id/btAddSubCat"
android:hint="Adicionar subcategoria"
android:layout_marginLeft="28dp"/>
<ImageButton
android:contentDescription="Adicionar subcategoria"
android:src="@drawable/ic_action_newc"
android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btAddSubCat"
android:layout_below="@+id/tvCat"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:focusable="false"/>
<com.prjctt.allan.newfinance.ExpandedListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@android:id/list"
android:scrollbars="none"
android:padding="0dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/btAddSubCat"/>