Increment/Decrement Counter in Item of ListView












-1















probably a relatively easy question but I'm a beginner, couldn't find an answer in here and wasn't able to figure out a solution myself.



I have a ListView that is populated by views a simple LinearLayout consisting of a name TextView, a quantity TextView and two buttons (-/+) that shall increment/decrement the quantity TextView.



onItemClickListener couldn't help me because I didn't want to listen to clicks on the Layout as a whole but on clicks on the increment/decrement buttons.



So I guess I have to set the OnClickLIsteners in the getView method of the adapter class like this:



@Override
public View getView(int i, View view, ViewGroup parent){

if(view==null){
view = LayoutInflater.from(context).inflate(R.layout.recipe_list_item, listView, false);
}

//just the ordinary adapter

Button increase=view.findViewById(R.id.increase);

Button decrease=view.findViewById(R.id.decrease);

increase.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v){

//increment logic
}});


decrease.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//decrement logic
}

}});

return view;

}


I tried different approaches (like a GlobalUser class or notifyDataSetChanged from within getView) and it worked to some extent. At best I was able to change to quantity TextView but it only wouldn't go any higher than 2.



What I'm looking for is a proper and clean way to this. Thanks in advance!



Oh, and this is my LinearLayout:






<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recipe Name"
android:id="@+id/name_tv"
android:layout_weight="2"
android:textSize="20sp"
android:layout_gravity="center"/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1">

<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/decrease"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_margin="5dp"
android:id="@+id/quantity_tv"/>


<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/increase"/>


</LinearLayout>











share|improve this question

























  • I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

    – I_A_Mok
    Jan 19 at 15:28


















-1















probably a relatively easy question but I'm a beginner, couldn't find an answer in here and wasn't able to figure out a solution myself.



I have a ListView that is populated by views a simple LinearLayout consisting of a name TextView, a quantity TextView and two buttons (-/+) that shall increment/decrement the quantity TextView.



onItemClickListener couldn't help me because I didn't want to listen to clicks on the Layout as a whole but on clicks on the increment/decrement buttons.



So I guess I have to set the OnClickLIsteners in the getView method of the adapter class like this:



@Override
public View getView(int i, View view, ViewGroup parent){

if(view==null){
view = LayoutInflater.from(context).inflate(R.layout.recipe_list_item, listView, false);
}

//just the ordinary adapter

Button increase=view.findViewById(R.id.increase);

Button decrease=view.findViewById(R.id.decrease);

increase.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v){

//increment logic
}});


decrease.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//decrement logic
}

}});

return view;

}


I tried different approaches (like a GlobalUser class or notifyDataSetChanged from within getView) and it worked to some extent. At best I was able to change to quantity TextView but it only wouldn't go any higher than 2.



What I'm looking for is a proper and clean way to this. Thanks in advance!



Oh, and this is my LinearLayout:






<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recipe Name"
android:id="@+id/name_tv"
android:layout_weight="2"
android:textSize="20sp"
android:layout_gravity="center"/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1">

<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/decrease"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_margin="5dp"
android:id="@+id/quantity_tv"/>


<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/increase"/>


</LinearLayout>











share|improve this question

























  • I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

    – I_A_Mok
    Jan 19 at 15:28
















-1












-1








-1








probably a relatively easy question but I'm a beginner, couldn't find an answer in here and wasn't able to figure out a solution myself.



I have a ListView that is populated by views a simple LinearLayout consisting of a name TextView, a quantity TextView and two buttons (-/+) that shall increment/decrement the quantity TextView.



onItemClickListener couldn't help me because I didn't want to listen to clicks on the Layout as a whole but on clicks on the increment/decrement buttons.



So I guess I have to set the OnClickLIsteners in the getView method of the adapter class like this:



@Override
public View getView(int i, View view, ViewGroup parent){

if(view==null){
view = LayoutInflater.from(context).inflate(R.layout.recipe_list_item, listView, false);
}

//just the ordinary adapter

Button increase=view.findViewById(R.id.increase);

Button decrease=view.findViewById(R.id.decrease);

increase.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v){

//increment logic
}});


decrease.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//decrement logic
}

}});

return view;

}


I tried different approaches (like a GlobalUser class or notifyDataSetChanged from within getView) and it worked to some extent. At best I was able to change to quantity TextView but it only wouldn't go any higher than 2.



What I'm looking for is a proper and clean way to this. Thanks in advance!



Oh, and this is my LinearLayout:






<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recipe Name"
android:id="@+id/name_tv"
android:layout_weight="2"
android:textSize="20sp"
android:layout_gravity="center"/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1">

<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/decrease"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_margin="5dp"
android:id="@+id/quantity_tv"/>


<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/increase"/>


</LinearLayout>











share|improve this question
















probably a relatively easy question but I'm a beginner, couldn't find an answer in here and wasn't able to figure out a solution myself.



I have a ListView that is populated by views a simple LinearLayout consisting of a name TextView, a quantity TextView and two buttons (-/+) that shall increment/decrement the quantity TextView.



onItemClickListener couldn't help me because I didn't want to listen to clicks on the Layout as a whole but on clicks on the increment/decrement buttons.



So I guess I have to set the OnClickLIsteners in the getView method of the adapter class like this:



@Override
public View getView(int i, View view, ViewGroup parent){

if(view==null){
view = LayoutInflater.from(context).inflate(R.layout.recipe_list_item, listView, false);
}

//just the ordinary adapter

Button increase=view.findViewById(R.id.increase);

Button decrease=view.findViewById(R.id.decrease);

increase.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v){

//increment logic
}});


decrease.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//decrement logic
}

}});

return view;

}


I tried different approaches (like a GlobalUser class or notifyDataSetChanged from within getView) and it worked to some extent. At best I was able to change to quantity TextView but it only wouldn't go any higher than 2.



What I'm looking for is a proper and clean way to this. Thanks in advance!



Oh, and this is my LinearLayout:






<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recipe Name"
android:id="@+id/name_tv"
android:layout_weight="2"
android:textSize="20sp"
android:layout_gravity="center"/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1">

<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/decrease"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_margin="5dp"
android:id="@+id/quantity_tv"/>


<Button
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/increase"/>


</LinearLayout>








java android xml listview getview






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 19 at 14:05









Radesh

3,64911433




3,64911433










asked Jan 19 at 14:02









André FrankAndré Frank

144




144













  • I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

    – I_A_Mok
    Jan 19 at 15:28





















  • I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

    – I_A_Mok
    Jan 19 at 15:28



















I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

– I_A_Mok
Jan 19 at 15:28







I have a sample in ExpandableListView here: stackoverflow.com/questions/50092400/… Take a look of getChildView() of that adapter, hope that helps!

– I_A_Mok
Jan 19 at 15:28














0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54267880%2fincrement-decrement-counter-in-item-of-listview%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54267880%2fincrement-decrement-counter-in-item-of-listview%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Liquibase includeAll doesn't find base path

How to use setInterval in EJS file?

Petrus Granier-Deferre