Losing focus when notifyDataSetChanged() is called in ExpandableListView - android

I have an ExpandableListView which contains 2 TextViews and an EditText for entering amount for each child and it allows inline edit.
I need to to change the amount value for the group instantly when one of its child's amount changed.
I have done that but the problem is that when I called the notifyDataSetChanged() method for showing the change in group I lost the focus from the current edittext. That is, if I changed the amount field in the first child of a group and then click on the amount field of the second child, the focus is still on the first child because of the notifyDataSetChanged().
How can I solve this?
My code is below.
ExpandableListAdapter.java:
package com.example.empandroid.view;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import com.fort.empandroid.R;
import com.example.empandroid.model.Employee;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Typeface;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseExpandableListAdapter;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private final Context context;
private List<Employee> listDataHeader;
private HashMap<Integer, List<Employee>> listDataChild;
DecimalFormat df = new DecimalFormat("#.00");
int s;
Float value = 0.0f, change = 0.0f;
public ExpandableListAdapter(Context context, List<Employee> listDataHeader, HashMap<Integer, List<Employee>> listChildData) {
this.context = context;
this.listDataHeader = listDataHeader;
this.listDataChild = listChildData;
//this.context=mainContxt.getApplicationContext();
}
public static class ListHolder {
Employee expCoa;
TextView txtName;
TextView txtAmount;
TextView txtMonthTotal;
EditText edtAmount;
}
#Override
public int getGroupCount() {
return this.listDataHeader.size();
}
#Override
public int getChildrenCount(int groupPosition) {
int childcount = this.listDataChild.get(this.listDataHeader.get(groupPosition).getiD()).size();
return childcount;
}
#Override
public Employee getGroup(int groupPosition) {
return this.listDataHeader.get(groupPosition);
}
#Override
public Employee getChild(int groupPosition, int childPosition) {
return this.listDataChild.get(this.listDataHeader.get(groupPosition).getiD()).get(childPosition);
}
#Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
#Override
public boolean hasStableIds() {
return false;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
df.setMinimumIntegerDigits(1);
ListHolder expHolder = new ListHolder();
expHolder.expCoa = getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
expHolder.txtName = (TextView) convertView.findViewById(R.id.txtAccount);
expHolder.txtAmount = (TextView) convertView.findViewById(R.id.txtAmount);
expHolder.txtMonthTotal = (TextView) convertView.findViewById(R.id.txtMonthTotal);
convertView.setTag(expHolder);
expHolder.txtName.setTypeface(null, Typeface.BOLD);
expHolder.txtAmount.setTypeface(null, Typeface.BOLD);
expHolder.txtMonthTotal.setTypeface(null, Typeface.BOLD);
setupItem(expHolder);
return convertView;
}
#Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
df.setMinimumIntegerDigits(1);
final ListHolder expHolder = new ListHolder();
expHolder.expCoa = getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
expHolder.txtName = (TextView) convertView.findViewById(R.id.txtAccount);
expHolder.edtAmount = (EditText) convertView.findViewById(R.id.edtAmount);
expHolder.txtMonthTotal = (TextView) convertView.findViewById(R.id.txtMonthTotal);
convertView.setTag(expHolder);
setupChildItem(expHolder);
//expHolder.edtAmount.requestFocus();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
final AlertDialog dialog = builder.create();
//AlertDialog.Builder alert = new AlertDialog.Builder(mainContxt);
expHolder.edtAmount.setOnFocusChangeListener(new OnFocusChangeListener() {
#Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
//dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
onChange(v, groupPosition, childPosition, expHolder.expCoa);
} else {
//Toast.makeText(context, " else "+s, 68000).show();
onFocus(v);
}
}
});
return convertView;
}
private void onFocus(View v) {
final EditText Caption = (EditText) v;
value = Float.parseFloat(Caption.getText().toString());
Toast.makeText(context, "onFocus value " + value + " change " + change, 68000).show();
}
public void onChange(View views, int groupPosition, int childPosition, Employee expCoaChd) {
final int position = views.getId();
final EditText Caption = (EditText) views;
change = Float.parseFloat(Caption.getText().toString());
if (value != change) { //use database type for this loop condition
//perform change
ListHolder expHolders = new ListHolder();
expHolders.expCoa = getGroup(groupPosition);
expHolders.expCoa.setAmount(expHolders.expCoa.getAmount() - expCoaChd.getAmount() + change);
expCoaChd.setAmount(change);
notifyDataSetChanged();
//Toast.makeText(context, "onChange value "+value+" change "+change, 68000).show();
change = 0.0f;
value = 0.0f;
}
}
#Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
private void setupChildItem(ListHolder expHolder) {
expHolder.txtName.setText(expHolder.expCoa.getStrName());
if (expHolder.expCoa.getiD() == -998 || expHolder.expCoa.getiD() == -999) {
expHolder.edtAmount.setText("");
expHolder.txtMonthTotal.setText("");
} else {
expHolder.edtAmount.setText(df.format(expHolder.expCoa.getAmount()));
expHolder.txtMonthTotal.setText(df.format(expHolder.expCoa.getExpenseMTD()));
}
}
private void setupItem(ListHolder expHolder) {
expHolder.txtName.setText(expHolder.expCoa.getStrName());
if (expHolder.expCoa.getiD() == -998 || expHolder.expCoa.getiD() == -999) {
expHolder.txtAmount.setText("");
expHolder.txtMonthTotal.setText("");
} else {
expHolder.txtAmount.setText(df.format(expHolder.expCoa.getAmount()));
expHolder.txtMonthTotal.setText(df.format(expHolder.expCoa.getExpenseMTD()));
}
}
}
list_group.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="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="#+id/txtAccount"
android:layout_width="0dp"
android:layout_height="50dp"
android:textSize="16sp"
android:gravity="center_vertical"
android:layout_weight="3"/>
<TextView
android:id="#+id/txtAmount"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="end"
android:textSize="15sp"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<TextView
android:id="#+id/txtMonthTotal"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="end"
android:textSize="15sp"
android:textAppearance="?android:attr/textAppearanceSmall"/>
</LinearLayout>
list_item.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="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="#+id/txtAccount"
android:layout_width="0dp"
android:layout_height="50dp"
android:textSize="15sp"
android:gravity="center_vertical"
android:layout_weight="3"/>
<EditText
android:id="#+id/edtAmount"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="end"
android:textSize="15sp"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<TextView
android:id="#+id/txtMonthTotal"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:gravity="end"
android:textSize="15sp"
android:textAppearance="?android:attr/textAppearanceSmall"/>
</LinearLayout>

Related

Launch Intent on click of ExpandableListView

Good evening everyone !
I am currently working on an ExpandableListView.
The parent contains 1 ImageView.
The child contains 1 TextView and 3 Buttons.
In terms of display, no problem: everything works as I want.
However, I want to add actions to my buttons and I realize that when I put a SetOnclickListener in the getChildView I am not able to launch a new INTENT.
The examples I find on the internet seem to show only clicks on dynamic elements. However, the buttons are not dynamic in my case.
I planned to use a variable to do a SWITCH and thus launch the right INTENT.
But since it doesn't work, I wonder if my direction is the right one.
MaintActivity.java
package com.evo.tab2escape;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
public class jeux2 extends Activity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<Integer> headerData;
HashMap<Integer,ArrayList<ChildDataModel>> childData;
ChildDataModel childDataModel;
Context mContext;
ArrayList<ChildDataModel> logo0,logo1,logo2,logo3,logo4,logo5,logo6,logo7,logo8,logo9,logo10,logo11;
private int lastExpandedPosition = -1;
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.jeux2);
mContext = this;
headerData = new ArrayList<>();
childData = new HashMap<Integer, ArrayList<ChildDataModel>>();
logo0 = new ArrayList<>();
logo1 = new ArrayList<>();
logo2 = new ArrayList<>();
logo3 = new ArrayList<>();
logo4 = new ArrayList<>();
logo5 = new ArrayList<>();
logo6 = new ArrayList<>();
logo7 = new ArrayList<>();
logo8 = new ArrayList<>();
logo9 = new ArrayList<>();
logo10 = new ArrayList<>();
logo11 = new ArrayList<>();
// get the listview
expListView = (ExpandableListView) findViewById(R.id.ExpandableListView);
// populate data
// Adding header data
headerData.add(R.drawable.logo0);
headerData.add(R.drawable.logo1);
headerData.add(R.drawable.logo2);
headerData.add(R.drawable.logo3);
headerData.add(R.drawable.logo4);
headerData.add(R.drawable.logo5);
headerData.add(R.drawable.logo6);
headerData.add(R.drawable.logo7);
headerData.add(R.drawable.logo8);
headerData.add(R.drawable.logo9);
headerData.add(R.drawable.logo10);
headerData.add(R.drawable.logo11);
// Adding child data
childDataModel = new ChildDataModel(1,"Test0","logo0");
logo0.add(childDataModel);
childData.put(headerData.get(0),logo0);
childDataModel = new ChildDataModel(1,"Test1","logo1");
logo1.add(childDataModel);
childData.put(headerData.get(1),logo1);
childDataModel = new ChildDataModel(1,"Test2","logo2");
logo2.add(childDataModel);
childData.put(headerData.get(2),logo2);
childDataModel = new ChildDataModel(1,"Test3","logo3");
logo3.add(childDataModel);
childData.put(headerData.get(3),logo3);
childDataModel = new ChildDataModel(1,"Test4","logo4");
logo4.add(childDataModel);
childData.put(headerData.get(4),logo4);
childDataModel = new ChildDataModel(1,"Test5","logo5");
logo5.add(childDataModel);
childData.put(headerData.get(5),logo5);
childDataModel = new ChildDataModel(1,"Test6","logo6");
logo6.add(childDataModel);
childData.put(headerData.get(6),logo6);
childDataModel = new ChildDataModel(1,"Test7","logo7");
logo7.add(childDataModel);
childData.put(headerData.get(7),logo7);
childDataModel = new ChildDataModel(1,"Test8","logo8");
logo8.add(childDataModel);
childData.put(headerData.get(8),logo8);
childDataModel = new ChildDataModel(1,"test09","logo9");
logo9.add(childDataModel);
childData.put(headerData.get(9),logo9);
childDataModel = new ChildDataModel(1,"test10","logo10");
logo10.add(childDataModel);
childData.put(headerData.get(10),logo10);
childDataModel = new ChildDataModel(1,"test11","logo11");
logo11.add(childDataModel);
childData.put(headerData.get(11),logo11);
listAdapter = new ExpandableListAdapter(this, headerData, childData);
// setting list adapter
expListView.setAdapter(listAdapter);
//--------------------------child click listener--------------------------
expListView.setOnChildClickListener(new OnChildClickListener() {
#Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
{
Log.d("TEST", "onChildClick: " + groupPosition + " " + childPosition + " " + id + " " + parent);
//Toast.makeText(getApplicationContext(), "heeeeeeeeerrrrreeeee!", Toast.LENGTH_SHORT).show();
return true;
}
});
//group expanded
expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
#Override
public void onGroupExpand(int headPosition) {
if (lastExpandedPosition != -1
&& headPosition != lastExpandedPosition) {
expListView.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = headPosition;
}
});
//group collapsed
expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
#Override
public void onGroupCollapse(int headPosition) {
}
});
//--------------------------RETOUR--------------------------
Button retour = (Button) findViewById(R.id.retour);
retour.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
Intent Intent_next = new Intent(jeux2.this, MainActivity.class);
startActivity(Intent_next);
}
});
//--------------------------HISTO--------------------------
TextView histo = (TextView) findViewById(R.id.histo);
histo.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
Intent Intent_next = new Intent(jeux2.this, historique.class);
startActivity(Intent_next);
}
});
}
}
class ChildDataModel
{
long id;
String txt;
String aventure;
public ChildDataModel(int id, String explications, String aventure) {
this.setId(id);
this.setTxt(explications);
}
public long getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTxt() {
return txt;
}
public void setTxt(String explications) {
this.txt = explications;
}
public String getTxt_aventure() {
return aventure;
}
#Override
public String toString()
{
return super.toString();
}
}
ExpandableListAdapter.java
package com.evo.tab2escape;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<Integer> headerData; // Images
// child data in format of header , child
private HashMap<Integer, ArrayList<ChildDataModel>> childData;
public ExpandableListAdapter(Context context, List<Integer> listDataHeader,
HashMap<Integer, ArrayList<ChildDataModel>> childData) {
this._context = context;
this.headerData = listDataHeader;
this.childData = childData;
}
#Override
public Object getChild(int groupPosition, int childPosititon) {
return this.childData.get(this.headerData.get(groupPosition))
.get(childPosititon);
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
#Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
ChildDataModel child = (ChildDataModel) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
TextView explications = (TextView) convertView.findViewById(R.id.explications);
explications.setText(child.getTxt());
Button play = (Button) convertView.findViewById(R.id.play);
Button doc = (Button) convertView.findViewById(R.id.doc);
Button param = (Button) convertView.findViewById(R.id.param);
final String aventure = child.getTxt_aventure();
play.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
Log.d("TAG", "poulet: ");
}
});
doc.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
Log.d("TAG", "poulet: ");
}
});
param.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v)
{
Log.d("TAG", "poulet: ");
}
});
return convertView;
}
#Override
public int getChildrenCount(int groupPosition) {
return this.childData.get(this.headerData.get(groupPosition))
.size();
}
#Override
public Object getGroup(int groupPosition) {
return this.headerData.get(groupPosition);
}
#Override
public int getGroupCount() {
return this.headerData.size();
}
#Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
ImageView logo = (ImageView) convertView.findViewById(R.id.logo);
int imageId = this.headerData.get(groupPosition);
logo.setImageResource(imageId);
return convertView;
}
#Override
public boolean hasStableIds() {
return false;
}
#Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
list_group.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="wrap_content"
android:orientation="vertical">
<Space
android:layout_width="match_parent"
android:layout_height="20dp">
</Space>
<ImageView
android:id="#+id/logo"
android:layout_width="match_parent"
android:scaleType="fitXY"
android:layout_height="100dp"/>
</LinearLayout>
list_item.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="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal"
android:id="#+id/divers">
<TextView
android:id="#+id/explications"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:gravity="center_vertical"
android:textStyle="bold"
android:layout_weight="1.5">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal">
<Button
android:id="#+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jouer"
android:layout_gravity="center"
android:background="#drawable/bouton_main"
android:layout_weight="1">
</Button>
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</Space>
<Button
android:id="#+id/doc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Documents"
android:layout_gravity="center"
android:background="#drawable/bouton_main"
android:layout_weight="1">
</Button>
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</Space>
<Button
android:id="#+id/param"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Paramètres"
android:layout_gravity="center"
android:background="#drawable/bouton_main"
android:layout_weight="1">
</Button>
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</Space>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Can somoene help me ?
I want to start a new intent on click on Button.
Edit : i add child Click Listener on MainActivity but its works only if i set clickable,focusable = false on the 3 Buttons in layout list_item.xml.
And than the click is on the complete child. I can't say if the click is on Button 1, 2 or 3.
Can we fix it ?
Problem solved.
I do this in ExpandableListAdapter in getChildView.
param.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent next = new Intent(parent.getContext(), parametres.class);
parent.getContext().startActivity(next);
}
});

ExpandableListView with ViewPager as child-elements executes getChildView twice

I want to create an expandable list with viewpagers as subviews. The problem is now that with my code it calls the getChildView method twice and thus creates my viewpager twice.
I also tried it with the TextView (which is the sample code I posted here for convenience) to simplify the code but the same issue arose.
My best guess is it has something to do with the height property of the layouts but no matter how i changed it, I couldn't resolve the issue.
Please help. I am totally lost. I used a tutorial for this code and I seem to be the only who has that issue judging from the youtube comment section. (https://www.youtube.com/watch?v=jZxZIFnJ9jE)
(If you need any other part of the code please let me know.)
delete.xml file looks like this
<?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="match_parent"
android:id="#+id/sukahead">
<TextView
android:id="#+id/suka"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="suka"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
android:paddingStart="?android:attr/expandableListPreferredChildPaddingLeft"
/>
</LinearLayout>
sublist.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="wrap_content"
android:padding="8dp" android:background="#color/white"
android:id="#+id/sublist">
<TextView
android:id="#+id/dict_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
android:paddingStart="?android:attr/expandableListPreferredChildPaddingLeft"
android:textSize="16sp"
android:textColor="#color/colorAccent"
android:text="test"
/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="#color/colorPrimary">
<EditText
android:id="#+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="#string/search_hint"
android:layout_margin="15dp"
android:padding="5dp"
app:layout_constraintTop_toTopOf="parent"
android:background="#color/white"
android:adjustViewBounds="true"
android:maxLines="1"
android:inputType="text"
android:onClick="lookup_word"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="#id/search_bar"
android:orientation="horizontal">
<ExpandableListView
android:id="#+id/search_result_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#333"
android:dividerHeight="1dp"
android:background="#color/white"
android:layout_margin="15dp"/>
</LinearLayout>
</RelativeLayout>
ExpandableListAdapter.java
package com.lunaticcoding.linguodict;
import android.content.Context;
import android.graphics.Typeface;
import android.support.v4.view.ViewPager;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
public class ExpendableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> data;
private HashMap<String, String[]> listHashMap;
private LayoutInflater inflater;
private String pageData[];
public ExpendableListAdapter(Context context, List<String> list, HashMap<String, String[]> hashMap) {
this.context = context;
this.data = list;
this.listHashMap = hashMap;
}
#Override
public int getGroupCount() {
return data.size();
}
#Override
public int getChildrenCount(int groupPosition) {
return listHashMap.get(data.get(groupPosition)).length;
}
#Override
public Object getGroup(int groupPosition) {
return data.get(groupPosition);
}
#Override
public Object getChild(int groupPosition, int childPosition) {
return listHashMap.get(data.get(groupPosition))[childPosition];
}
#Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
#Override
public boolean hasStableIds() {
return true;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.sublist, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.dict_entry);
textView.setText(data.get(groupPosition));
return convertView;
}
#Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String)getChild(groupPosition, childPosition);
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.delete, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.suka);
return convertView;
}
#Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
MainActivity (only OnCreate)
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchBar = (EditText) findViewById(R.id.search_bar);
searchResults = (ExpandableListView) findViewById(R.id.search_result_list);
list_results = new ArrayList<>();
examples_results = new HashMap<>();
list_results.add("test1");
list_results.add("test2");
list_results.add("test3");
String pageData1[] = new String[]{"si", "siiii"};
String pageData2[] = new String[]{"jifasfa", "sfasdfasiii"};
String pageData3[] = new String[]{"jifasfa", "sfasdfasiii"};
examples_results.put(list_results.get(0), pageData1);
examples_results.put(list_results.get(1), pageData2);
examples_results.put(list_results.get(2), pageData3);
searchResultsAdapter = new ExpendableListAdapter(this, list_results, examples_results);
searchResults.setAdapter(searchResultsAdapter);
lastExpandedPosition = -1;
searchResults.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
#Override
public void onGroupExpand(int groupPosition) {
if(lastExpandedPosition != -1 && (lastExpandedPosition != groupPosition)){
searchResults.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = groupPosition;
}
});
}
In the sub_list.xml the layout_height is "wrap_content". Change it to a fixed height (some dp) or match_parent and it will work.
Reason:
wrap_content has to calculate the height of the layout content it has to match thus reloading the layout afterwards -> creating the list more than once.

Custom ExpandableListView is not working

I created custom ExpandableListView but it does not expand when I click on it.
activity_main.xml
<RelativeLayout 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:paddingBottom="#dimen/activity_vertical_margin"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/exp_lv"
></ExpandableListView>
group_items.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="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="270sp"
android:layout_height="30sp"
android:layout_marginLeft="30sp"
android:id="#+id/title"
android:textIsSelectable="true"
/>
<CheckBox
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/chk"
/>
child_items.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="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/child"
android:textIsSelectable="true"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="120sp"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:id="#+id/dd"
android:textStyle="bold"
/>
<TextView
android:layout_width="200sp"
android:layout_height="wrap_content"
android:layout_toRightOf="#+id/dd"
android:textIsSelectable="true"
android:id="#+id/date"
/>
</RelativeLayout>
group.java
package com.example.expandablelistview;
import java.util.ArrayList;
public class group {
private String Name;
private boolean isSelected;
private ArrayList<child> Items;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
}
public ArrayList<child> getItems() {
return Items;
}
public void setItems(ArrayList<child> items) {
Items = items;
}
}
child.java
package com.example.expandablelistview;
public class child {
String child_title;
String dd;
String date;
public String getChild_title() {
return child_title;
}
public void setChild_title(String child_title) {
this.child_title = child_title;
}
public String getDd() {
return dd;
}
public void setDd(String dd) {
this.dd = dd;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
MyBaseAdapter.java
package com.example.expandablelistview;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
public class MyBaseAdapter extends BaseExpandableListAdapter{
Context context;
ArrayList<group> group_al;
public MyBaseAdapter(Context context,ArrayList<group> group_al) {
this.context=context;
this.group_al=group_al;
}
#Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<child> chList = group_al.get(groupPosition).getItems();
return chList.get(childPosition);
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
#Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
child ch = (child) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.child_items, null);
}
TextView child = (TextView) convertView.findViewById(R.id.child);
TextView dd = (TextView) convertView.findViewById(R.id.dd);
TextView date= (TextView) convertView.findViewById(R.id.date);
child.setText(ch.getChild_title().toString());
dd.setText(ch.getChild_title().toString());
date.setText(ch.getChild_title().toString());
return convertView;
}
#Override
public int getChildrenCount(int groupPosition) {
ArrayList<child> chList = group_al.get(groupPosition).getItems();
return chList.size();
}
#Override
public Object getGroup(int groupPosition) {
return group_al.get(groupPosition);
}
#Override
public int getGroupCount() {
return group_al.size();
}
#Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
group gr = (group) getGroup(groupPosition);
long group_id = getGroupId(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.group_items, null);
}
TextView title = (TextView) convertView.findViewById(R.id.title);
title.setText(gr.getName());
CheckBox chk=(CheckBox) convertView.findViewById(R.id.chk);
chk.setFocusable(false);
return convertView;
}
#Override
public boolean hasStableIds() {
return true;
}
#Override
public boolean isChildSelectable(int arg0, int arg1) {
return false;
}
}
MainActivity.java
package com.example.expandablelistview;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.widget.ExpandableListView;
public class MainActivity extends Activity {
private MyBaseAdapter ExpAdapter;
private ArrayList<group> ExpListItems;
private ExpandableListView ExpandList;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ExpandList = (ExpandableListView) findViewById(R.id.exp_lv);
ExpListItems = SetStandardGroups();
ExpAdapter = new MyBaseAdapter(MainActivity.this, ExpListItems);
ExpandList.setAdapter(ExpAdapter);
}
private ArrayList<group> SetStandardGroups() {
ArrayList<group> list = new ArrayList<group>();
group gru= new group();
gru.setName("Tax 1");
ArrayList<child> ch_list= new ArrayList<child>();
child ch = new child();
ch.setChild_title("Information of tax 1");
ch.setDd("Due Date:");
ch.setDate("22/02/2016");
ch_list.add(ch);
gru.setItems(ch_list);
list.add(gru);
return list;
}
}
When I run the application I can see the first row of ExpandableListView i.e. Tax1 with CheckBox beside it but when I click on the row then it does not expanded.
Please guys help me.
Thanks in advance.
please add:
android:focusable="false"
android:focusableInTouchMode="false"
to your checkbox
also remove from textView:
android:textIsSelectable="true"
**
<?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="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="270sp"
android:layout_height="30sp"
android:layout_marginLeft="30sp"
android:id="#+id/title"
****android:textIsSelectable="true"**// remove this line in group layout**
/>
<CheckBox
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/chk"
/>
**
In MybaseAdapter please change method like this
#Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
child ch = (child) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.child_items, null);
}
TextView child = (TextView) convertView.findViewById(R.id.child);
TextView dd = (TextView) convertView.findViewById(R.id.dd);
TextView date= (TextView) convertView.findViewById(R.id.date);
child.setText(ch.getChild_title().toString());
dd.setText(ch.getDd().toString());
date.setText(ch.getDate().toString());
return convertView;
}
When I add
android:focusable="false"
android:focusableInTouchMode="false"
to your checkbox and
android:textIsSelectable="true"
to TextView then It works great
but now I want to store the checked CheckBox value (only group_title and value of Date TextView ) to the database so, where I add clickListener on Checkbox

how to add function on child items in expandablelistview?

Good Day! i am new in android programming and java, so i did a copy paste of a source code in the internet then it worked but i have to do some edit for this.
i wanna ask how to add a function when i click on switch of every group that supposed to be on/off not to toast. i understand how to use onClickListener Somehow but i dont know where to put the function.
any answers or good tutorial link for this will be greatly appreciated THANK YOU!
MainActivity.java
package com.capstone.r.e.d.e_kit;
import java.util.ArrayList;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.ExpandableListView;
public class MainActivity extends ExpandableListActivity{
private ArrayList<String> parentItems = new ArrayList<String>();
private ArrayList<Object> childItems = new ArrayList<Object>();
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this is not really necessary as ExpandableListActivity contains an ExpandableList
//setContentView(R.layout.main);
ExpandableListView expandableList = getExpandableListView(); // you can use (ExpandableListView) findViewById(R.id.list)
expandableList.setDividerHeight(2);
expandableList.setGroupIndicator(null);
expandableList.setClickable(true);
setGroupParents();
setChildData();
MainActivityAdapter adapter = new MainActivityAdapter(parentItems, childItems);
adapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE), this);
expandableList.setAdapter(adapter);
expandableList.setOnChildClickListener(this);
}
public void setGroupParents() {
parentItems.add("Flash Light");
parentItems.add("Whistle");
parentItems.add("Infographics");
parentItems.add("Battery Saving Mode");
}
public void setChildData() {
// Flash Light
ArrayList<String> child = new ArrayList<String>();
child.add("Switch");
childItems.add(child);
// Whistle
child = new ArrayList<String>();
child.add("Switch");
childItems.add(child);
// Information
child = new ArrayList<String>();
child.add("Online News");
child.add("Do's and Dont's");
childItems.add(child);
// Battery Saving Mode
child = new ArrayList<String>();
child.add("Switch");
childItems.add(child);
}
}
MainActivityAdapter.java
package com.capstone.r.e.d.e_kit;
import java.util.ArrayList;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivityAdapter extends BaseExpandableListAdapter {
private Activity activity;
private ArrayList<Object> childtems;
private LayoutInflater inflater;
private ArrayList<String> parentItems, child;
public MainActivityAdapter(ArrayList<String> parents, ArrayList<Object> childern) {
this.parentItems = parents;
this.childtems = childern;
}
public void setInflater(LayoutInflater inflater, Activity activity) {
this.inflater = inflater;
this.activity = activity;
}
#SuppressWarnings("unchecked")
#Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
child = (ArrayList<String>) childtems.get(groupPosition);
TextView textView = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.group, null);
}
textView = (TextView) convertView.findViewById(R.id.textView1);
textView.setText(child.get(childPosition));
convertView.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View view) {
Toast.makeText(activity, child.get(childPosition),
Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.row, null);
}
((CheckedTextView) convertView).setText(parentItems.get(groupPosition));
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
#Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
#Override
public int getChildrenCount(int groupPosition) {
return ((ArrayList<String>) childtems.get(groupPosition)).size();
}
#Override
public Object getGroup(int groupPosition) {
return null;
}
#Override
public int getGroupCount() {
return parentItems.size();
}
#Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
#Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
#Override
public long getGroupId(int groupPosition) {
return 0;
}
#Override
public boolean hasStableIds() {
return false;
}
#Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ExpandableListView
android:id="#+id/list"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:groupIndicator="#null" />
</LinearLayout>
row.xml
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/textView1"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:padding="10dp"
android:textColor="#FFFFFF"
android:textSize="15sp"
android:background="#339966"
/>
group.xml
<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="40dp"
android:background="#android:color/white"
android:clickable="true"
android:orientation="vertical"
android:paddingLeft="40dp"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="39dp"
android:gravity="center_vertical">
<TextView
android:id="#+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textIsSelectable="true"
android:textColor="#000000"
android:textSize="14sp"
/>
</LinearLayout>
</LinearLayout>
Try to set setOnGroupClickListener:
adapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE), this);
expandableList.setAdapter(adapter);
expandableList.setOnChildClickListener(this);
expandableList.setOnGroupClickListener(this); //Implement inteface ExpandableListView.OnGroupClickListener
Documatation:
http://developer.android.com/reference/android/widget/ExpandableListView.html#setOnGroupClickListener(android.widget.ExpandableListView.OnGroupClickListener)
Tutorial:
http://www.vogella.com/tutorials/AndroidListView/article.html#expandablelistview

EditText inside ExpandableListView is not expanding the childs

I have created an ExpandableListView following this tutorial http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ which is working fine. There have 2 TextView in the parent group. But when I am adding an EditText in parent group it's showing in the listview but after clicking on the parent it's not expanding. I assume it's due to the focus on EditText.
Please help to find a way to focus on parent item so that by clicking it expands and shows child items. On the other hand when I will try to write something in EditText it should focus on that without expanding the ListView.
Here is my code:
package com.sifb.icms.sit.application.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.sifb.icms.sit.R;
import com.sifb.icms.sit.object.Object_CateringMenu;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.EditText;
import android.widget.TextView;
public class ExpandableListAdapter_CateringMenu extends BaseExpandableListAdapter {
private Context _context;
private List<Object_CateringMenu> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, String> _listDataChild;
public ExpandableListAdapter_CateringMenu(Context context, ArrayList<Object_CateringMenu> listDataHeader,
HashMap<String, String> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
#Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition).getCategoryChoice());
}
#Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
#Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_cateringmenu_description, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.tvDescription);
txtListChild.setText(childText);
return convertView;
}
#Override
public int getChildrenCount(int groupPosition) {
return 1;
}
#Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
#Override
public int getGroupCount() {
return this._listDataHeader.size();
}
#Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
#Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
Object_CateringMenu objGroup = (Object_CateringMenu) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_cateringmenu, null);
}
TextView lblListHeaderCat = (TextView) convertView
.findViewById(R.id.tvCategoryChoice);
lblListHeaderCat.setTypeface(null, Typeface.BOLD);
lblListHeaderCat.setText(objGroup.getCategoryChoice());
TextView lblListHeaderRatio = (TextView) convertView
.findViewById(R.id.tvRatio);
lblListHeaderRatio.setTypeface(null, Typeface.BOLD);
lblListHeaderRatio.setText(objGroup.getRatio());
return convertView;
}
#Override
public boolean hasStableIds() {
return false;
}
#Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/svParent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/tvTitle"
style="#style/tvTitleText"
android:text="#string/cateringmenu_title" />
<include
android:id="#+id/include_cateringmenu_header"
layout="#layout/list_cateringmenu_header" />
<ExpandableListView
android:id="#+id/elvCateringMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="#android:color/transparent"
android:descendantFocusability="beforeDescendants"
android:layout_marginTop="10dp" />
</LinearLayout>
Parent ListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/rlParent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1" >
<TextView
android:id="#+id/tvCategoryChoice"
style="#style/tvCateringMenu"
android:layout_marginLeft="10dp"
android:layout_marginRight="20dp"
android:layout_weight="0.5" />
<TextView
android:id="#+id/tvRatio"
style="#style/tvCateringMenu"
android:layout_weight="0.2" />
<EditText
android:id="#+id/etMealUplift"
style="#style/etCateringMenuMealUplift"
android:layout_weight="0.3" />
</LinearLayout>

Categories

Resources