简体   繁体   中英

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 (IE lights up), and I don't want that.

I don't understand why the part below doesn't work (IE 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>

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM