在Recycler视图中将Long Press Listner添加到Listview

时间:2018-02-07 07:38:44

标签: android listview android-recyclerview onclicklistener

我一直在搜索很多教程,以便在ListviewRecyclerView内实现一个长按听众的项目。到目前为止,我没有运气。 我想要一个菜单​​在持有List Item一段时间后更多ap。我在这里附上我的代码,请帮助我。

我添加了完整的代码,包括MainAcyivity。 我有一个标签视图,其中包含3tabs。在选项卡视图中,有一个包含Listview的片段。

我希望长按List可以带一个弹出菜单,其中包含添加或删除选项。

MainActivity.java

package tabbardemo.com.materialdesigntabs_demo;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
private static Toolbar toolbar;
private static ViewPager viewPager;
private static TabLayout tabLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    viewPager = (ViewPager) findViewById(R.id.viewPager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager

    //Implementing tab selected listener over tablayout
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());//setting current selected item over viewpager
            switch (tab.getPosition()) {
                case 0:
                    Log.e("TAG","TAB1");
                    break;
                case 1:
                    Log.e("TAG","TAB2");
                    break;
                case 2:
                    Log.e("TAG","TAB3");
                    break;
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}


//Setting View Pager
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new DummyFragment("Inbox"), "Inbox");
    adapter.addFrag(new EventsFragment("QA"), "QA");
    adapter.addFrag(new EventsFragment("Events"), "Events");
    viewPager.setAdapter(adapter);
}


//View Pager fragments setting adapter class
class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();//fragment arraylist
    private final List<String> mFragmentTitleList = new ArrayList<>();//title arraylist

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }


    //adding fragments and title method
    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
    }
}

activity_main.xml中

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<!-- AppBar Layout   -->
<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="fill_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    <!-- Tab Layout for creating tabs -->
    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<!-- Helps handing the Fragments for each Tab -->
<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

dummy_fragment.xml

<?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"
android:background="@color/blue"
android:gravity="center"
android:orientation="vertical">

<!--  Recycler View  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="none" />

</LinearLayout>

DummyFragment.java

package tabbardemo.com.materialdesigntabs_demo;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

/**
 * Created by SONU on 16/09/15.
 */
public class DummyFragment extends Fragment {
private View view;

private String title;//String for tab title

private static RecyclerView recyclerView;

private OnItemClickListener mListener;

public interface OnItemClickListener {
    public void onItemClick(View view, int position);

    public void onLongItemClick(View view, int position);
}


public DummyFragment(String title) {
    this.title = title;//Setting tab title
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.dummy_fragment, container, false);

    setRecyclerView();
    return view;

}
//Setting recycler view
private void setRecyclerView() {

    recyclerView = (RecyclerView) view
            .findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView
            .setLayoutManager(new LinearLayoutManager(getActivity()));//Linear Items




    ArrayList<String> arrayList = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
        arrayList.add(title+" Items " + i);//Adding items to recycler view
    }
    RecyclerView_Adapter adapter = new RecyclerView_Adapter(getActivity(), arrayList);
    recyclerView.setAdapter(adapter);// set adapter on recyclerview



}

}

RecyclerView_Adapter

package tabbardemo.com.materialdesigntabs_demo;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

/**
 * Created by SONU on 10/09/15.
 */
public class RecyclerView_Adapter extends
    RecyclerView.Adapter<DemoViewHolder> {
private ArrayList<String> arrayList;
private Context context;


private OnItemClickListener mListener;

public interface OnItemClickListener {
    public void onItemClick(View view, int position);
}



public RecyclerView_Adapter(Context context,
                            ArrayList<String> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
}



@Override
public int getItemCount() {
    return (null != arrayList ? arrayList.size() : 0);

}

@Override
public void onBindViewHolder(DemoViewHolder holder,
                             int position) {


    final DemoViewHolder mainHolder = (DemoViewHolder) holder;
    //Setting text over textview
   // mainHolder.bind(arrayList.get(position), listener);
    mainHolder.title.setText(arrayList.get(position));



}

@Override
public DemoViewHolder onCreateViewHolder(
        ViewGroup viewGroup, int viewType) {
    LayoutInflater mInflater = LayoutInflater.from(viewGroup.getContext());

    ViewGroup mainGroup = (ViewGroup) mInflater.inflate(
            R.layout.item_row, viewGroup, false);
    DemoViewHolder mainHolder = new DemoViewHolder(mainGroup) {
        @Override
        public String toString() {
            return super.toString();
        }
    };

// 13805 ////////////////////////////////
        return mainHolder;

    }


}

DemoViewHolder.java

package tabbardemo.com.materialdesigntabs_demo;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

/**
 * Created by SONU on 31/08/15.
 */
public abstract class DemoViewHolder extends RecyclerView.ViewHolder {


public TextView title;


public DemoViewHolder(View view) {
    super(view);


    this.title = (TextView) view.findViewById(R.id.cardTitle);

    }

}

ite_row.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/iv_image"
        android:padding="10dp"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:src="@mipmap/ic_launcher">
    </ImageView>

<TextView
    android:id="@+id/cardTitle"
    android:layout_toRightOf ="@+id/iv_image"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:padding="15dp"
    android:text="Card Title"
    android:textColor="#000000"
    android:textSize="17sp" ></TextView>


</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

1-创建您的菜单项(您的列表项以便长按显示)

touchend

2-设置监听器和菜单。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >  

<item  
    android:id="@+id/one"  
    android:title="One"/>  

<item  
    android:id="@+id/two"  
    android:title="Two"/>  

<item  
    android:id="@+id/three"  
    android:title="Three"/>  

 </menu>  

答案 1 :(得分:1)

在ListView中执行setOnItemLongClickListener()时:

 lv.setOnItemLongClickListener(new OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                        int pos, long id) {

                    // Dialog/Popup will appears here

                    showAddDeleteDialog();

                    return true;
                }
            }); 

    public void showAddDeleteDialog(){


     AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
    dialog.setCancelable(false);
    dialog.setTitle("Add or Delete Dialog");
   // dialog.setMessage("Are you sure you want to delete this entry?" );
    dialog.setPositiveButton("Add", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            //Action for "Add".
        }
    })
            .setNegativeButton("Delete", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                //Action for "Delete".
                }
            });

    final AlertDialog alert = dialog.create();
    alert.show();
    }