Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 长时间单击停止ListView上的单击操作_Android_Listview - Fatal编程技术网

Android 长时间单击停止ListView上的单击操作

Android 长时间单击停止ListView上的单击操作,android,listview,Android,Listview,我已经阅读了所有的longclick+click侦听器,因此发布了ListView,但找不到解决此问题的方法。根据我读到的帖子,我确信我做的事情是正确的 问题 我的点击手势用于注册,但在将LongClickListener附加到我的列表视图后,只有长点击手势在列表视图中注册。对我所做的有什么想法吗 代码 streamactivity.java(列表视图) public类的流性扩展了appcompativity{ 私有列表视图列表视图; /**用户界面操作和设置*/ @凌驾 创建时受保护的void

我已经阅读了所有的longclick+click侦听器,因此发布了ListView,但找不到解决此问题的方法。根据我读到的帖子,我确信我做的事情是正确的

问题

我的点击手势用于注册,但在将LongClickListener附加到我的列表视图后,只有长点击手势在列表视图中注册。对我所做的有什么想法吗

代码

streamactivity.java(列表视图)

public类的流性扩展了appcompativity{
私有列表视图列表视图;
/**用户界面操作和设置*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u\u\u流);
//将适配器连接到ListView
listView=(listView)findViewById(R.id.stream\u提要);
if(savedInstanceState!=null&!savedInstanceState.isEmpty())
{
lvContent=savedInstanceState.getParcelableArrayList(已还原的用户流);
manager=savedInstanceState.getParcelable(已还原的\u manager\u UTIL);
}否则{
lvContent=newarraylist();
manager=新的DataManagerUtil(本);
}
}
/**设置要单击的每个列表视图项,并启动
*基于选定流对象的新活动。
*
*/
私有void setItemOnClicks(){
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
/*传递流,但传递子流元素的内存地址
而不是包含
*/
流selectedFlow=(流)listView.getItemAtPosition(位置);
意图i=新意图(streamactivity.this、FlowSandBoxActivity.class);
i、 putExtra(“selectedFlow”,selectedFlow);
//包裹要传递给新活动的流对象
星触觉(i);
}
});
setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
显示弹出菜单(streamactivity.this,视图);
返回true;
}
});
}
公共无效显示弹出菜单(上下文ctx,视图v){
弹出菜单弹出=新弹出菜单(ctx,v);
//此活动实现OnMenuItemClickListener
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId())
{
案例R.id.菜单\u删除:
返回true;
违约:
返回false;
}
}
});
弹出。充气(右菜单。菜单\流量\弹出);
popup.show();
}
@凌驾
受保护的void onResume(){
super.onResume();
setItemOnClicks();
}
列表项

流\u stream.xml中的流\u项\u

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="75dp"\
    android:longClickable="true"
    >
<android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
        <TextView
            android:textAppearance=
                "?android:attr/textAppearanceMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="12dp"
            android:id="@+id/item_flow_name" />
        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout>

列表视图

stream_feed.xml

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="2"
    android:columnCount="1">

        <include layout="@layout/stream_toolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_columnSpan="1"
            android:layout_gravity="fill_horizontal" />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/stream_feed"
            android:clipToPadding="false"
            android:layout_columnSpan="1"
            android:layout_gravity="fill_horizontal"
            android:layout_row="1">
        </ListView>

</GridLayout>

使用
showPopUpMenu(视图);
而不是
showPopUpMenu(streamActivity.this,view);

创建方法

public void showPopUpMenu(View v) {
PopupMenu popup = new PopupMenu(TheStreamActivity.this, v);

// This activity implements OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId())
        {
            case R.id.menu_delete:
                return true;
            default:
                return false;
        }

    }
});
popup.inflate(R.menu.menu_flow_popup);
popup.show();
}

更改
onitemlong单击
方法以返回
false
而不是
true
,这样做会告诉android您希望事件仍由其他侦听器处理。 应该是这样的:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        showPopUpMenu(TheStreamActivity.this, view);
        return false;
    }
});
listView.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
显示弹出菜单(streamactivity.this,视图);
返回false;
}
});

我已经找到了解决方案,现在看起来很直观/愚蠢。也许有人能验证我的假设

如果在XML级别启用或启用android:clickable=“true”android:LongClick=“true”,似乎会阻止编程onClick侦听器正常工作

这对我来说是有意义的,因为我认为在XML级别上,我们有onClick属性,当通过编程实现单击时,该属性的方法是空的。视图正在寻找一个空方法(即不执行任何操作),而不是onClick侦听器方法,或者在设置onClick侦听器之前呈现视图

不太确定,但这是我的解决方案(无论哪种方式,我学到的经验都将是使用编程或基于XML的可点击项)

private void setItemOnClicks(){
//单击时的TODO侦听器不工作
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
/*传递流,但传递子流元素的内存地址
而不是包含
*/
Toast.makeText(TheStreamActivity.this,“SELected”,Toast.LENGTH_LONG.show();
流selectedFlow=(流)listView.getItemAtPosition(位置);
意图i=新意图(streamactivity.this、FlowSandBoxActivity.class);
i、 putExtra(“selectedFlow”,selectedFlow);
//包裹要传递给新活动的流对象
星触觉(i);
}
});
listView.setLongClickable(真);
setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
显示弹出菜单(streamctivity.this、view、position);
返回true;
}
});
}
列表项(请参见
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        showPopUpMenu(TheStreamActivity.this, view);
        return false;
    }
});
private void setItemOnClicks() {
        // TODO On Click Listeners not working
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    /* Passes Flow but passes the memory address of the childFlowElements
                     instead of the actual object containing the
                      */
                Toast.makeText(TheStreamActivity.this, "SELected", Toast.LENGTH_LONG).show();
                Flow selectedFlow = (Flow) listView.getItemAtPosition(position);

                Intent i = new Intent(TheStreamActivity.this, FlowSandBoxActivity.class);

                i.putExtra("selectedFlow", selectedFlow);
                    // Parcels the Flow Object to@ be passed to new activity
                startActivity(i);
            }

        });

        listView.setLongClickable(true);

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                showPopUpMenu(TheStreamActivity.this, view, position);
                return true;
            }
        });


    }
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:divider="@android:color/transparent"
    android:dividerHeight="15dp">
<android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        card_view:cardCornerRadius="8dp"
        card_view:cardElevation="8dp"
        android:foreground="?android:attr/selectableItemBackground">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <TextView
            android:textAppearance=
                "?android:attr/textAppearanceMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="12dp"
            android:id="@+id/item_flow_name" />
        <!-- Flow Symbol Icon item_flow_name-->


        <ImageView
            android:contentDescription="@string/task_flag_description"
            android:id="@+id/item_element_icon"
            android:src="@drawable/flag_small_black_outline"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_marginEnd="125dp"
            android:layout_centerVertical="true"
            android:layout_alignParentEnd="true" />
            <!-- Insert Flow Element Icon -->

        <TextView
            android:id="@+id/item_element_count"
            android:textAppearance=
                "?android:attr/textAppearanceSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignLeft="@+id/item_element_icon"
            android:layout_marginLeft="25dp" />

        <ImageView
            android:contentDescription="@string/timer_description"
            android:id="@+id/item_time_icon"
            android:src="@drawable/timer_black_48dp"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_centerVertical="true"
            android:layout_alignStart="@+id/item_element_icon"
            android:layout_toRightOf="@+id/item_element_icon"
            android:layout_marginLeft="55dp" />
        <!-- Insert Flow Element Icon -->

        <TextView
            android:id="@+id/item_total_time"
            android:textAppearance=
                "?android:attr/textAppearanceSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignLeft="@+id/item_time_icon"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="2dp" />

        <TextView
            android:id="@+id/item_time_units"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/item_time_icon"
            android:layout_marginLeft="50dp"
            android:layout_alignLeft="@+id/item_time_icon"
            android:layout_marginTop="2dp" />
        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout>