有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么ListView中的项目不可单击?

我的列表视图中的项目不可单击。我已尝试在内容空间的RelativeLayout标记中获取CurrentFocus()并阻止子体。xml。 我只想从列表中看到两个函数:

  1. 当我单击该项目时,另一个活动将启动
  2. 长按时,将显示关联菜单

地点活动。爪哇

        package abdualla.com.covuninavigator;


import 安卓.annotation.TargetApi;
import 安卓.app.Fragment;
import 安卓.app.FragmentManager;
import 安卓.app.ListActivity;
import 安卓.content.Context;
import 安卓.net.Uri;
import 安卓.os.AsyncTask;
import 安卓.os.Build;
import 安卓.support.design.widget.FloatingActionButton;
import 安卓.support.design.widget.NavigationView;
import 安卓.support.design.widget.Snackbar;
import 安卓.support.v4.widget.DrawerLayout;
import 安卓.support.v7.app.ActionBarDrawerToggle;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.support.v7.widget.Toolbar;
import 安卓.text.Editable;
import 安卓.text.TextUtils;
import 安卓.text.TextWatcher;
import 安卓.util.Log;
import 安卓.view.ContextMenu;
import 安卓.view.LayoutInflater;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.AdapterView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.EditText;
import 安卓.widget.ListView;
import 安卓.widget.SearchView;
import 安卓.widget.TextView;
import 安卓.widget.Toast;

import com.google.安卓.gms.appindexing.Action;
import com.google.安卓.gms.appindexing.AppIndex;
import com.google.安卓.gms.common.api.GoogleApiClient;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

//Places List
public class PlaceActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    DBHelper db = new DBHelper(this);
    ListView placeslist;
    EditText seachbar;
    static ListAdapter listAdapter;
    static ArrayList<Place> list;
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //Un Comment to Build Database for First time run
//        db.insertPlace("Alan Berry", "Coventry, West Midlands CV1 5FB", "52.407981", "-1.505527");
//        db.insertPlace("Coventry Un*iversity College", "113A Gosftord Street Coventry CV15FB", "52.407439", "-1.500221");
//        db.insertPlace("Bugatti", "Cox Street Coventry CV1 5FB", "52.407479", "-1.503390");
//        db.insertPlace("Charles Ward", "Cox Street Coventry CV1 5FB", "52.408623", "-1.504856");
//        db.insertPlace("Engineering & Computing Building", "Gulson Rd, Coventry, West Midlands CV1 2JH", "52.405607", "-1.499454");
//        db.insertPlace("Ellen Terry", "Jordan Well,Coventry CV1 5RW", "52.406883", "-1.504703");
//        db.insertPlace("Frederick Lanchester Library", "Frederick Lanchester Building, Coventry University, Coventry, West Midlands CV1 5DD", "52.406056", "-1.500545");
//        db.insertPlace("George Elliot", "Coventry CV15LW", "52.408217", "-1.504890");
//        db.insertPlace("Graham Sutherland", "Gosford Street, Coventry CV1", "52.407212", "-1.502934");
//        db.insertPlace("The Hub", "Gosford Street, Coventry, West Midlands CV1 5QP", "52.407741", "-1.504792");
//        db.insertPlace("Jaguar Building", "Gosford Street, Coventry, West Midlands CV1 5PJ", "52.407450", "-1.500545");
//        db.insertPlace("James Starley", "Cox Street, Coventry, West Midlands CV1 5PH", "52.407892", "-1.504065");
//        db.insertPlace("Maurice Foss", "Maurice Foss Building, Coventry, West Midlands CV1 5PH", "52.408047", "-1.503346");
//        db.insertPlace("Multi-Storey Car Park", "Gosford St, Coventry, West Midlands CV1 5DD", "52.406288", "-1.499699");
//        db.insertPlace("Priory Building", "Priory Street, Coventry", "52.407351", "-1.503692");
//        db.insertPlace("Richard Crossman", "Much Park Street,Coventry, West Midlands CV1HF", "52.406666", "-1.505438");
//        db.insertPlace("Sir John Laing Building", "Much Park Street,Coventry, West Midlands CV1HF", "52.405879", "-1.505003");
//        db.insertPlace("Sir William Lyons", "Gosford Street, Coventry CV1", "52.407476", "-1.499722");
//        db.insertPlace("Student Centre", "Gulson Rd, Coventry, West Midlands CV1 2JH", "52.404984", "-1.500694");
//        db.insertPlace("Whitefriars", "Coventry CV1 2DS", "52.405255", "-1.501582");
//        db.insertPlace("William Morris", "Cox Street, Coventry, West Midlands CV1 5PH", "52.407892", "-1.504065");
//        db.insertPlace("Sports Centre", "Whitefriars Lane, Coventry, West Midlands CV1 2DS", "52.405973", "-1.504225");
//        db.insertPlace("Coventry City Council", "Earl Street, Coventry, West Midlands CV1 5RR", "52.407355", "-1.508035");
        //Un Comment to Build Database for First time run

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_place);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentManager fm = getFragmentManager();
                AddPlaceFragement addPlaceFragement = new AddPlaceFragement();
                addPlaceFragement.show(fm, "Add Place");
            }
        });

//        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
//        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
//                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
//        drawer.setDrawerListener(toggle);
//        toggle.syncState();
//
//        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
//        navigationView.setNavigationItemSelectedListener(this);
//      db.deleteAll();


        placeslist = (ListView) findViewById(R.id.list);
        seachbar = (EditText) findViewById(R.id.searchplaces);
        list = db.getAllplaces();
        listAdapter = new ListAdapter(this, list, getResources());
        placeslist.setAdapter(listAdapter);

        placeslist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), "Position is:" + position, Toast.LENGTH_LONG);
            }
        });

        if(placeslist.isClickable()){
            Log.v("Clickable is ","Yes");
        }
        seachbar.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                listAdapter.getFilter().filter(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        registerForContextMenu(placeslist);
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        return false;
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("Select an Option");
        menu.add(0, v.getId(), 0, "Show on Map");
        menu.add(0, v.getId(), 0, "Delete");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

        //  info.position will give the index of selected item
        int IndexSelected=info.position;

        if(item.getTitle()=="Delete"){
            list.remove(IndexSelected);
            listAdapter.notifyDataSetChanged();
        }
        else if (item.getTitle()=="Show on Map"){
            Toast.makeText(getApplicationContext(),"Lat is:"+list.get(IndexSelected).getLat()+"lng is: "+list.get(IndexSelected).getLng(),Toast.LENGTH_LONG);
        }
        return super.onContextItemSelected(item);

    }

    @Override
    public void onStart() {
        super.onStart();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client.connect();
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Place Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("安卓-app://abdualla.com.covuninavigator/http/host/path")
        );
        AppIndex.AppIndexApi.start(client, viewAction);
    }

    @Override
    public void onStop() {
        super.onStop();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Place Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("安卓-app://abdualla.com.covuninavigator/http/host/path")
        );
        AppIndex.AppIndexApi.end(client, viewAction);
        client.disconnect();
    }
}

活动地点。xml

<?xml version="1.0" encoding="utf-8"?>
<安卓.support.design.widget.CoordinatorLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:fitsSystemWindows="true"
    tools:context="abdualla.com.covuninavigator.PlaceActivity">

    <安卓.support.design.widget.AppBarLayout
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        安卓:theme="@style/AppTheme.AppBarOverlay">

        <安卓.support.v7.widget.Toolbar
            安卓:id="@+id/toolbar"
            安卓:layout_width="match_parent"
            安卓:layout_height="?attr/actionBarSize"
            安卓:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            安卓:title="Places List"/>

    </安卓.support.design.widget.AppBarLayout>

    <include layout="@layout/content_place" />

    <安卓.support.design.widget.FloatingActionButton
        安卓:id="@+id/fab"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:layout_gravity="bottom|end"
        安卓:layout_margin="@dimen/fab_margin"
        安卓:src="@安卓:drawable/ic_input_add" />

</安卓.support.design.widget.CoordinatorLayout>

满足你的地方。xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="fill_parent"
    安卓:layout_height="fill_parent"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    安卓:orientation="horizontal">
    <ListView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
        安卓:id="@+id/list"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:layout_below="@+id/searchplaces"
        />
    <安卓.support.design.widget.AppBarLayout
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        安卓:theme="@style/AppTheme.AppBarOverlay"
        安卓:id="@+id/view" />

    <EditText
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/searchplaces"
        安卓:layout_marginTop="47dp"
        安卓:layout_below="@+id/view"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentStart="true"
        安卓:layout_alignParentRight="true"
        安卓:layout_alignParentEnd="true" />

</RelativeLayout>

ListAdapter。爪哇

package abdualla.com.covuninavigator;

import 安卓.app.Activity;
import 安卓.content.Context;
import 安卓.content.DialogInterface;
import 安卓.content.res.Resources;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.AdapterView;
import 安卓.widget.BaseAdapter;
import 安卓.widget.Filter;
import 安卓.widget.Filterable;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;

import java.util.ArrayList;

/**
 * Created by amr on 28/12/15.
 */
public class ListAdapter extends BaseAdapter implements DialogInterface.OnClickListener, Filterable {
    private Activity activity;
    private ArrayList data;
    private static LayoutInflater inflater=null;
    public Resources res;
    Place tempValues=null;
    int i=0;
    private ArrayList<Place> mOriginalValues;
    private ArrayList<Place> mDisplayedValues;

    public ListAdapter(Activity a, ArrayList d,Resources resLocal){
        this.activity=a;
        this.data=d;
        this.res=resLocal;
        this.mOriginalValues = d;
        this.mDisplayedValues = d;
        inflater=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        if(data.size()<=0)
            return 1;
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }



    @Override
    public Filter getFilter() {

        Filter filter = new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,FilterResults results) {

                data = (ArrayList<Place>) results.values; // has the filtered values
                notifyDataSetChanged();  // notifies the data with new filtered values
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();        // Holds the results of a filtering operation in values
                ArrayList<Place> FilteredArrList = new ArrayList<Place>();

                if (mOriginalValues == null) {
                    mOriginalValues = new ArrayList<Place>(mDisplayedValues); // saves the original data in mOriginalValues
                }

                /********
                 *
                 *  If constraint(CharSequence that is received) is null returns the mOriginalValues(Original) values
                 *  else does the Filtering and returns FilteredArrList(Filtered)
                 *
                 ********/
                if (constraint == null || constraint.length() == 0) {

                    // set the Original result to return
                    results.count = mOriginalValues.size();
                    results.values = mOriginalValues;
                } else {
                    constraint = constraint.toString().toLowerCase();
                    for (int i = 0; i < mOriginalValues.size(); i++) {
                        String data = mOriginalValues.get(i).name;
                        if (data.toLowerCase().startsWith(constraint.toString())) {
                            FilteredArrList.add(new Place(mOriginalValues.get(i).getName(),mOriginalValues.get(i).getAddress(),mOriginalValues.get(i).getLat(),mOriginalValues.get(i).getLng()));
                        }
                    }
                    // set the Filtered result to return
                    results.count = FilteredArrList.size();
                    results.values = FilteredArrList;
                }
                return results;
            }
        };
        return filter;
    }


    public static class ViewHolder{

        public TextView name;
        public TextView address;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        ViewHolder holder;
        if(convertView==null){
            vi=inflater.inflate(R.layout.place_list_item,null);
            holder=new ViewHolder();
            holder.name=(TextView)vi.findViewById(R.id.placename);
            holder.address=(TextView)vi.findViewById(R.id.address);

            vi.setTag(holder);
        }
        else
            holder=(ViewHolder)vi.getTag();
        if(data.size()<=0)
        {
            holder.name.setText("No Places Found");
            holder.address.setText("");

        }
        else{
            tempValues=(Place)data.get(position);
            holder.name.setText(tempValues.getName());
            holder.address.setText(tempValues.getAddress());


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

            }
        });
        return vi;
    }


    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
}

更新1:

我确实添加了McClick listener,但是。。它不起作用。列表可以滚动,但不能单击。单击列表视图时,将显示反馈。。如果你有一个clicklistener,就会发生一些事情。。。。如果不这样做,将不会发生任何事情,但它仍会检测到单击。。我的情况不是这样的。似乎没有检测到咔哒声


共 (6) 个答案

  1. # 1 楼答案

    添加要在单击内部时执行的代码单击getView内部的侦听器

    public View getView(int position, View convertView, ViewGroup parent) {
    
    View vi = convertView;
    
    vi.setOnClickListener(new View.OnClickListener() {
    
     @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(), "Position is:" + position, Toast.LENGTH_LONG);
            }
        });
        return vi;
    }
    
  2. # 2 楼答案

    1。当我单击该项目时,另一个活动将启动

    为此,在placeslist.setAdapter(listAdapter);之后添加以下代码:

      placeslist .setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch (position) {
                case 0:
                    Intent i = new Intent(getApplicationContext(), YourNewActivty.class);
                    startActivity(i);
                    break;
            }
            }
            });
    

    2。长按时,将显示关联菜单

    Check this

  3. # 3 楼答案

    placeslist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                }
            });
    
  4. # 4 楼答案

    添加此代码,然后它就可以工作了

          placeslist .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    
                    }
                });
    
  5. # 5 楼答案

    Android不允许选择在项目布局中具有可聚焦元素的列表项目

    在布局的项目中禁用可聚焦

    android:focusable=“false”

  6. # 6 楼答案

    您的placeslist缺少一个侦听器! 如果项目有按钮或其他按钮,则可以将setOnClickListener设置为项目