how to calculate number using SherlockFragment - actionbarsherlock

Hi I am Trying To calculate number like Calculator. the code is working if I use Activity but doesn't work in Sherlock Fragment. I use android:onClick="". Can someone tell what should I do to implement this code. Thank you.
Code :
public class Calculate extends SherlockFragment {
private int resultspinner, inputnumber, totals;
private Spinner spinner;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.activity_summary,
container, false);
setSpinnerContent(rootView);
return rootView;
}
private void setSpinnerContent(View view)
{
spinner = (Spinner) view.findViewById( R.id.spinner );
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity()
.getBaseContext(),
R.array.pangkat_arrays, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter( adapter );
...
}
// showing a toast on selecting an item
//Toast.makeText(parent.getContext(), item, Toast.LENGTH_LONG).show();
}
#Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
public void startcalculate(View view) {
EditText ed_resultspinner = (EditText) getView().findViewById(R.id.EditText1);
EditText ed_input = (EditText) getView().findViewById(R.id.EditText2);
EditText ed_total = (EditText) getView().findViewById(R.id.EditText3);
try {
resultspinner = Integer.parseInt(ed_resultspinner.getText().toString());
inputnumber = Integer.parseInt(ed_input.getText().toString());
totals = resultspinner + inputnumber;
ed_total.setText(String.valueOf(totals));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
<Spinner
android:id="#+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="#+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
<EditText
android:id="#+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
<EditText
android:id="#+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startcalculate"
android:text="Button" />
Error
java.lang.IllegalStateException: Could not find a method startcalculate(View) in the activity class com.user.learing.MainActivity for onClick handler on view class android.widget.Button with id 'button1'

this is happening because your SherlockFragment class not finding reference onClick for some reason, you have to do is delete the onClick from layout and sets the code manually like this
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// your logic
}
});

Related

Spinner has data but doesn't have any preview text/selected text

Spinner has data but doesn't have any preview text/selected text I try various things and still doesn't show any text
Im trying to use spinner for some data and I successfully populated some list for spinner data but it doesn't show any in the spinner.
I also try various things i saw from the net and it didnt work.
Here is the link where I based my code for spinner: https://www.youtube.com/watch?v=j7P5k-dHS9Y
JAVA CODE:
public class SpinnerSample extends AppCompatActivity {
Spinner spinner;
boolean isSpinnerTouched = false;
DatabaseReference databaseReference;
String[] status = {"Not Available", "Available", "Under Maintenance"};
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_sample);
spinner = findViewById(R.id.spiiner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(SpinnerSample.this, R.layout.style_spinner, status);
adapter.setDropDownViewResource(R.layout.style_spinner);
spinner.setAdapter(adapter);
databaseReference = FirebaseDatabase.getInstance().getReference();
spinner.setOnTouchListener(new View.OnTouchListener() {
#Override
public boolean onTouch(View v, MotionEvent event) {
isSpinnerTouched = true;
return false;
}
});
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String value = adapterView.getItemAtPosition(i).toString();
if (!isSpinnerTouched) {
Toast.makeText(SpinnerSample.this, "No Selected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SpinnerSample.this, value, Toast.LENGTH_SHORT).show();
}
}
});
}
}
XML CODE:
<LinearLayout 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"
android:orientation="vertical"
tools:context=".SpinnerSample">
<Spinner
android:id="#+id/spiiner"
android:layout_width="240dp"
android:background="#ff0"
android:layout_height="40dp"
android:textColor="#000"
android:hint="Current Password"
android:layout_marginTop="10dp"/>
</LinearLayout>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:text="A"
android:padding="20dp"
android:layout_height="match_parent"
android:textColor="#000"
android:textColorHint="#1e7591">
</TextView>

Integrating google sign in, sign in button visibility not changing on UpdateUI method

I am trying to integrate a google sign in feature for my app. Its mostly working fine and I can sign in ok.
However, when the user is signed in, the sign in buttons visibility is supposed to be false, and then a LinearLayout which includes two text views and a log out button is supposed to become visible.
Here is the code of the main layout activity which has all the text views, buttons etc
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:id="#+id/prof_section"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<ImageView
android:id="#+id/Prof_Pic"
android:layout_width="90dp"
android:layout_height="wrap_content"
tools:srcCompat="#tools:sample/avatars" />
<LinearLayout
android:layout_width="255dp"
android:layout_height="wrap_content"
android:layout_marginLeft="28dp"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical">
<TextView
android:id="#+id/Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Display name here"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="#+id/Email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="Display email here"
android:textSize="12dp"
android:textStyle="bold" />
<Button
android:id="#+id/SignOut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Logout"
tools:layout_editor_absoluteX="159dp"
tools:layout_editor_absoluteY="506dp" />
</LinearLayout>
</LinearLayout>
<com.google.android.gms.common.SignInButton
android:id="#+id/sign_in_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:layout_marginRight="50dp"
android:layout_marginLeft="50dp"/>
</LinearLayout>
Here is the Main Activity file with all the code
private LinearLayout prof_section;
private LinearLayout LsignIn;
private Button SignOut;
private SignInButton SignIn;
private TextView Name,Email;
private ImageView Prof_Pic;
private GoogleApiClient GoogleApiClient;
private static final int REQ_CODE = 9001;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting variables as correct object
prof_section = (LinearLayout)findViewById(R.id.prof_section);
SignOut = (Button)findViewById(R.id.SignOut);
SignIn = (SignInButton)findViewById(R.id.sign_in_button);
Name = (TextView)findViewById(R.id.Name);
Email = (TextView)findViewById(R.id.Email);
Prof_Pic = (ImageView)findViewById(R.id.Prof_Pic);
//register buttons for onclick listener
SignIn.setOnClickListener(this);
SignOut.setOnClickListener(this);
//setting linearlayout and button to visible/invisible
prof_section.setVisibility(View.GONE);
SignIn.setVisibility(View.VISIBLE);
GoogleSignInOptions SignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail ().build();
GoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_ SIGN_IN_API,SignInOptions).build();
}
protected void onStart() {
super.onStart();
}
#Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.sign_in_button:
SignIn();
break;
case R.id.SignOut:
SignOut();
break;
}
}
#Override
public void onConnectionFailed(#NonNull ConnectionResult connectionResult) {
}
private void SignIn() {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(GoogleApiClient);
startActivityForResult(intent,REQ_CODE);
}
private void SignOut() {
Auth.GoogleSignInApi.signOut(GoogleApiClient).setResultCallback(new ResultCallback<Status>() {
#Override
public void onResult(#NonNull Status status) {
UpdateUI(false);
}
});
}
private void handleResult(GoogleSignInResult result) {
if(result.isSuccess())
{
GoogleSignInAccount account = result.getSignInAccount();
String name = account.getDisplayName();
String email = account.getEmail();
String img_url = account.getPhotoUrl().toString();
Name.setText(name);
Email.setText(email);
//Glide.vith(this).load(img_url).into(Prof_Pic);
UpdateUI(true);
}
else
{
UpdateUI(false);
}
}
private void UpdateUI(boolean isLogin) {
if(isLogin)
{
prof_section.setVisibility(View.VISIBLE);
SignIn.setVisibility(View.GONE);
}
else
{
prof_section.setVisibility(View.GONE);
SignIn.setVisibility(View.VISIBLE);
}
Im getting no error messages when I run the app
Since you are calling activitywithresult() function which returns the result, So you will get the result in onActivityResult(). As you are not having any Result handler you are not able to handle the result. You need to add onActivityResult(). If you get the result their, then you have to call your function handleResult() to know whether user is successfully signed in or not.
Just add this code:
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == REQ_CODE) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleResult(task);
}
}
private void handleResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
String name = account.getDisplayName();
String email = account.getEmail();
String img_url = account.getPhotoUrl().toString();
Name.setText(name);
Email.setText(email);
//Glide.vith(this).load(img_url).into(Prof_Pic);
UpdateUI(true);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
UpdateUI(false);
}
}

Android Custom List, Unexpectedly close application

I am using the following code to to display data in my custom list. but it closes with an exception of unsupported operaton. java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
public class VerifiedProblemsActivity extends Activity {
ArrayList<Problem> problemsList;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.d("IN VERIFIED ACTIVITY", "ACTIVITY");
setContentView(R.layout.verified_problems);
ListView problemsListView = (ListView) findViewById(R.id.problemsList);
ArrayList<Problem> problemsList = new ArrayList<Problem>();
Problem p1 = new Problem();
p1.problemName = "Problem 1";
p1.problemComments = "Comments 1";
Problem p2 = new Problem();
p2.problemName = "Problem 1";
p2.problemComments = "Comments 1";
problemsList.add(p1);
problemsList.add(p2);
problemsListView.setAdapter(new ProblemAdapter(getApplicationContext(),
android.R.layout.simple_list_item_1, problemsList));
}
private class Problem {
public String problemName;
public String problemComments;
public Problem() {
problemName = "";
problemComments = "";
}
}
private class ProblemAdapter extends ArrayAdapter<Problem> {
ArrayList<Problem> problemObjects;
#SuppressWarnings("unchecked")
public ProblemAdapter(Context context, int textViewResourceId,
List objects) {
super(context, textViewResourceId, objects);
problemObjects = new ArrayList<Problem>(objects);
// TODO Auto-generated constructor stub
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent);
try {
TextView title = (TextView) row
.findViewById(R.id.tvProblemTitle);
TextView description = (TextView) row
.findViewById(R.id.tvProblemDecription);
title.setText(problemsList.get(position).problemName);
description
.setText(problemsList.get(position).problemComments);
} catch (Exception e) {
Log.d("VERIFIED PROBLEM ACTIVITY", e.getMessage());
}
return row;
}
}
}
and the following is the list item layout I am using.
<?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" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:gravity="center_vertical" >
<ImageView
android:id="#+id/imgProblemImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="5dp"
android:src="#drawable/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="#+id/tvProblemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="#+id/tvProblemDecription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
java.lang.UnsupportedOperationException: addView(View, LayoutParams)
is not supported in AdapterView
I think problem is this:
View row = inflater.inflate(R.layout.list_item, parent);
AdapterView doesn't allow adding new View so you need to pass null as ViewGroup.
View row = inflater.inflate(R.layout.list_item, null, false);
Now it should works. Let me know.
problem in view.
change these methods
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent);
to like this
View row = convertView
if(row==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, null);
}
hope this will be helpful to you.

Strange ListView behavior [faster performance]

I find this very strange behavior of listview and it acts differently on Android 2.1 and 4.1
Here are the 2 classes I wrote which google advises to use for faster performance of ListView.
How to reproduce: Add an entry, check the first checkbox, then add more entries than one page. The checked box floats through the elements!
Here is a small project I wrote: http://tinyurl.com/strange-listview
Anyone can explain the issue or a workaround?
public class AlarmManagerActivity extends Activity {
private PerformanceArrayAdapter mPerformaceArrayAdapter;
private ListView mListView;
private ArrayList<String> mListItems = new ArrayList<String>();
private int mCounter = 0;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mListView = (ListView) findViewById(R.id.listViewCondition);
mPerformaceArrayAdapter = new PerformanceArrayAdapter(this, mListItems);
mListView.setAdapter(mPerformaceArrayAdapter);
}
public void onClickAdd(View view){
mListItems.add("" + mCounter++);
mPerformaceArrayAdapter.notifyDataSetChanged();
}
}
And here is the main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="#+id/buttonAdd" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Add New Alarm"
android:onClick="onClickAdd" />
<ListView android:id="#+id/listViewCondition"
android:layout_height="wrap_content" android:layout_width="match_parent"></ListView>
</LinearLayout>
And the performance adapter class.
public class PerformanceArrayAdapter extends ArrayAdapter<String> {
private final Activity context;
private final ArrayList<String> mListItems;
static class ViewHolder {
public TextView textView1;
public TextView textView2;
public CheckBox checkBox;
}
public PerformanceArrayAdapter(Activity context, ArrayList<String> listItems) {
super(context, R.layout.row_layout, listItems);
this.context = context;
this.mListItems = listItems;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.row_layout, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.textView1 = (TextView) rowView.findViewById(R.id.textView1);
viewHolder.textView2 = (TextView) rowView.findViewById(R.id.textView2);
viewHolder.checkBox = (CheckBox) rowView.findViewById(R.id.checkBox1);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
holder.textView1.setText(mListItems.get(position));
return rowView;
}
}
Here is the row_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="#+id/textView1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" android:text="TextView1"></TextView>
<TextView android:id="#+id/textView2" android:layout_below="#+id/textView1"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="TextView2"></TextView>
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="#+id/checkBox1"
android:layout_alignParentRight="true" android:focusable="false"
android:focusableInTouchMode="false"></CheckBox>
</RelativeLayout>
I found the solution, thanks to Vogella :)
I had to use the Domain Model mentioned here to track both the text view and check box.
http://www.vogella.com/articles/AndroidListView/article.html#listadvanced_interactive

How do I set a title in my layout with ListView?

I'm trying to implement a ListView with a title. However, with my code below, the following happens :
the title appears over the first list element.
There is a EditText which appears in front of the others on the top.
My android Activity
public class LoanRepaymentActivity extends ListActivity implements View.OnClickListener {
private Location lastKnownLocation;
private ArrayList<CurrentRepaymentInstallment> loansForRepayment;
#Override
public void onCreate(Bundle savedInstanceState){
lastKnownLocation = Utility.getLastKnownLocation(this);
super.onCreate(savedInstanceState);
Intent intent = getIntent();
RepaymentInfo repaymentInfo = (RepaymentInfo)intent.getSerializableExtra(Constants.CURRENT_REPAYMENT_INSTALLMENT);
loansForRepayment = repaymentInfo.getLoansForRepayment();
boolean repaymentsNotPresent = loansForRepayment == null || loansForRepayment.isEmpty();
if(repaymentsNotPresent){
Dialog dialog = Utility.getDialogWithText(LoanRepaymentActivity.this, getText(R.string.noLoansForRepayment).toString());
Utility.getDialogButton(dialog, LoanRepaymentActivity.this, PartnerGroupListActivity.class, intent.getStringExtra(Constants.ACECSS_TOKEN_PARAM));
dialog.show();
}
setContentView(R.layout.loan_repayments);
ArrayAdapter<CurrentRepaymentInstallment> adapter = new LoanRepaymentListAdapter(this, loansForRepayment);
View footer = getLayoutInflater().inflate(R.layout.loan_disbursement_footer, null);
getListView().addFooterView(footer);
setListAdapter(adapter);
if(!repaymentsNotPresent) {
TextView textView = (TextView)findViewById(R.id.screenTitle);
String currentInstallmentLabel = getText(R.string.currentInstallmentLabel).toString() + repaymentInfo.getCurrentGroupInstallment();
textView.setText(currentInstallmentLabel);
}
Button button = (Button)findViewById(R.id.disburse);
button.setOnClickListener(this);
}
The XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView android:id="#+id/screenTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TextView>
<ListView
android:id="#android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="#+layout/loan_disbursement_footer"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="#+id/borrowerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#+id/label"
android:textSize="14sp"
>
</TextView>
<TextView
android:id="#+id/loanAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#+id/label"
android:textSize="14sp"
>
</TextView>
<TextView
android:id="#+id/installmentNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#+id/label"
android:textSize="12sp"
>
</TextView>
<TextView
android:id="#+id/estimatedTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#+id/label"
android:textSize="12sp"
>
</TextView>
</LinearLayout>
<EditText
android:id="#+id/repaymentAmount"
android:layout_width="100sp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:inputType="numberDecimal"
android:textSize="12sp"
>
</EditText>
Custom Array Adapter
public class LoanRepaymentListAdapter extends ArrayAdapter<CurrentRepaymentInstallment> {
private final List<CurrentRepaymentInstallment> loansForRepayment;
private final Activity context;
public LoanRepaymentListAdapter(Activity context, List<CurrentRepaymentInstallment> loansForRepayment) {
super(context, R.layout.loan_repayments, loansForRepayment);
this.context = context;
this.loansForRepayment = loansForRepayment;
}
static class ViewHolder {
protected TextView borrowerName;
protected TextView loanAmount;
protected TextView installmentNumber;
protected TextView estimatedTotal;
protected EditText repaymentAmount;
}
#Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.loan_repayments, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.borrowerName = (TextView) view.findViewById(R.id.borrowerName);
viewHolder.loanAmount = (TextView) view.findViewById(R.id.loanAmount);
viewHolder.installmentNumber = (TextView) view.findViewById(R.id.installmentNumber);
viewHolder.estimatedTotal = (TextView) view.findViewById(R.id.estimatedTotal);
viewHolder.repaymentAmount = (EditText) view.findViewById(R.id.repaymentAmount);
// viewHolder.repaymentAmount.setEditableFactory(Editable.Factory.getInstance());
viewHolder.repaymentAmount.addTextChangedListener(new TextWatcher() {
#Override
public void afterTextChanged(Editable arg0) {
}
#Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
#Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String repaymentAmount = s.toString();
try {
loansForRepayment.get(position).setRepaymentAmount(Float.parseFloat(repaymentAmount));
} catch (Exception ex){
loansForRepayment.get(position).setRepaymentAmount(0.0F);
}
}
});
view.setTag(viewHolder);
viewHolder.repaymentAmount.setTag(loansForRepayment.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).repaymentAmount.setTag(loansForRepayment.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.borrowerName.setText(loansForRepayment.get(position).getLoanProfileBasicInfo().getBorrowerBasicInfo().getFirstName());
holder.loanAmount.setText("Rs. " + Float.toString(loansForRepayment.get(position).getLoanProfileBasicInfo().getLoanAmountInPaisa()/100));
holder.estimatedTotal.setText("Rs. " + Float.toString(loansForRepayment.get(position).getEstimatedTotalAmount()/100));
holder.installmentNumber.setText("Inst no : " + Integer.toString(loansForRepayment.get(position).getInstallmentNumber()));
float repaymentAmt = loansForRepayment.get(position).getRepaymentAmount();
if(repaymentAmt != 0.0) holder.repaymentAmount.setText(Float.toString(repaymentAmt));
return view;
}
}
Would be great if someone could tell me how to do this.
Set a new layout for the title and add it to the ListView as a header.
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
>
<TextView android:id="#+id/repaymentScreenTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="#string/repaymentsTitle" >
</TextView>
</LinearLayout>
Replace this block with the one below it in your Activity
if(!repaymentsNotPresent) {
TextView textView = (TextView)findViewById(R.id.screenTitle);
String currentInstallmentLabel = getText(R.string.currentInstallmentLabel).toString() + repaymentInfo.getCurrentGroupInstallment();
textView.setText(currentInstallmentLabel);
}
View headerView = getLayoutInflater().inflate(R.layout.loan_repayment_title, null);
TextView titleView = (TextView) headerView.findViewById(R.id.repaymentScreenTitle);
String titlePrefix = (String) getText(R.string.groupInstallmentLabel);
titleView.setText(titlePrefix + " " + repaymentInfo.getCurrentGroupInstallment());
getListView().addHeaderView(headerView);

Resources