Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make listFooter not clickable

So this is the deal, I have tried looking at other threads like this one here https://stackoverflow.com/questions/12479909/how-to-make-list-header-and-footer-not-click-able

But it doesn't work. I can't manage to "do nothing on click".

But the problem is not to handle what hapens when the list is clicked, that is that the list is giving feedback as if its been clicked (I.E lights up), and I don't want that.

I don't understand why the part below doesn't work (I.E it is still selectable/clickable)

ViewGroup footer = (ViewGroup)inflater.inflate(R.layout.listview_footer_row, null, false);//This is not working as it should
        listView.addFooterView(footer);

Anyone have any idea why my footer is clickable/selectable despite i add te false statment to the method?

Here is my code

import java.util.ArrayList;

import android.content.Intent;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;

public class PortfolioFragMent extends Fragment{

    private ListView listView;
    private Button goButton;
    private String[] listheader = {"Idag","Senaste","Antal","Avkastning %","Avkastning","Tot Värde"};
    private static ShareHoldingAdapter adapter;
    private int totalElemInlist = listheader.length;
    private int currentelemInList=0;
    private ArrayList<ShareHolding> allShareHoldings = new ArrayList<ShareHolding>(); 
    private Button buyButton;

    @SuppressLint("NewApi")
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

    @SuppressLint({ "NewApi", "NewApi" })
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        allShareHoldings = Portfolio.getPortfolio().getAllShareHoldings();

        super.onCreate(savedInstanceState);
        View view = inflater.inflate(R.layout.portfolioframe, container, false);    
        listView = (ListView)view.findViewById(R.id.listView1);
        String[] array = new String[] {"one", "two", "three"};
        /**********************************/
        adapter = new ShareHoldingAdapter(getActivity(), R.layout.listview_item_row, allShareHoldings); 
        /***********************************/

        ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listview_header_row, null, false);
        ViewGroup footer = (ViewGroup)inflater.inflate(R.layout.listview_footer_row, null, false);//This is not working as it should
        listView.addHeaderView(header);
        listView.addFooterView(footer);

        goButton = (Button)view.findViewById(R.id.testButton);
        goButton.setText(listheader[currentelemInList]);

        listView.setAdapter(adapter);
        goButton.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                String buttonPressed = (String) ((Button) view).getText();
                currentelemInList++;
                if(currentelemInList>=totalElemInlist){
                    currentelemInList=0;
                }
                adapter.setButtonPressed(currentelemInList);
                goButton.setText(listheader[currentelemInList]);
            }
        });

        listView.setOnItemClickListener(new OnItemClickListener() {
           public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
               /*
                * Have to catch Nullpointer exception here since I have two elements in list plus 1 header and 1 footer.
                * When I click the footer I sent the number 3 to my next intent (4-1). But I don't want the footer to fire on click at all
                */
               if(position<Portfolio.getPortfolio().count()){//Just to check that I havn't clicked listFooter.
               System.out.println("Klicka i listan");
                Intent intent = new Intent(getActivity().getApplicationContext(),
                DetailShareHoldingActivity.class);
                intent.putExtra("new_variable_name","value");
                intent.putExtra("bookPositionInList",(position-1));//Just so that the top of the list is not clicked
                System.out.println(position);

                startActivity(intent);  
               }
           } 
        });

        buyButton = (Button)view.findViewById(R.id.buyNewShares);
        buyButton.setOnClickListener(new OnClickListener() {public void onClick(View view) {

            buyShares();

        }});
        return view;    
    }

    @SuppressLint({ "NewApi", "NewApi" })
    private void buyShares(){
            System.out.println("Köpt tryckt");
        Intent intent = new Intent(getActivity().getApplicationContext(),
                BuyNewSharesActivity.class);
                startActivity(intent);  
        }

    @SuppressLint({ "NewApi", "NewApi" })
    public void onListItemClick(ListView l, View v, int position, long id) {
        System.out.println("Klicka i listan");
        Intent intent = new Intent(getActivity().getApplicationContext(),
        DetailShareHoldingActivity.class);
        intent.putExtra("new_variable_name","value");
        intent.putExtra("bookPositionInList",position);
        startActivity(intent);  
    }
      public static ShareHoldingAdapter getPortfolioFragmentShareHoldingAdapter(){
            return adapter;
        }
}

And here is my listview_footer_row.xml file

<?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" >
        <TableLayout
            android:id="@+id/book_detailTable"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="top"
            android:layout_weight="1"
            android:paddingTop="0dip" >
            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="top"
                android:paddingTop="0dip" >
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:ems="10"
                    android:gravity="left"
                    android:text="Namn"
                    android:textColor="#ababab"
                    android:textSize="25dip" />
            </TableRow>
    </TableLayout>
</LinearLayout>
like image 313
anders Avatar asked Dec 09 '12 13:12

anders


1 Answers

instead of using

addFooterView(v) 

use

List.addFooterView(v, data, isSelectable);

and set isselectable = false

List.addFooterView(v, null,false);

so your footerView is no longer selectable

like image 118
Arash GM Avatar answered Oct 24 '22 12:10

Arash GM