有 Java 编程相关的问题?

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

java如何在ListView中使用onLongClick方法?

大家好,我是安卓的新手,我有一个任务,当用户长时间点击列表视图中的项目时,会输出一个选项。你能帮我一下吗?提前谢谢。我在互联网上获得了这段代码,并试图对其进行调整,但我不知道在哪里只需长按一下该方法。请帮帮我,伙计们

    public class MainActivity extends ListActivity{

    private File mCurrentNode = null;
    private File mLastNode = null;
    private File mRootNode = null;
    private ArrayList<File> mFiles = new ArrayList<File>();
    private CustomAdapter mAdapter = null;
    private String fname;
    private Context context;
    private ArrayList<File> objname;
    File f;
    String filename;
    Button df;
    private Bundle savedInstanceState;
    ListView parent=null;
    int position=0;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     File Audio = new File(Environment.getExternalStorageDirectory() + "/Audio");
     File Ebook = new File(Environment.getExternalStorageDirectory() + "/Ebook");
     File Images = new File(Environment.getExternalStorageDirectory() + "/Images");
     File Video = new File(Environment.getExternalStorageDirectory() + "/Video");




        Audio.mkdirs();
        Ebook.mkdirs();
        Images.mkdirs();
        Video.mkdirs();

        if(!Audio.exists())
         {
             if(Audio.mkdir()) 
               {
                //directory is created;
               }

         }
        if(!Ebook.exists())
         {
             if(Audio.mkdir()) 
               {
                //directory is created;
               }

         }
        if(!Images.exists())
         {
             if(Audio.mkdir()) 
               {
                //directory is created;
               }

         }
        if(!Video.exists())
         {
             if(Audio.mkdir()) 
               {
                //directory is created;
               }

         }
        mAdapter = new CustomAdapter(this, R.layout.list_row, mFiles);
        setListAdapter(mAdapter);
        if (savedInstanceState != null) {
            mRootNode = (File)savedInstanceState.getSerializable("root_node");
            mLastNode = (File)savedInstanceState.getSerializable("last_node");
            mCurrentNode = (File)savedInstanceState.getSerializable("current_node");
        }
        refreshFileList();
    }


     /*   public void onLongClick(ListView parent, View v, int position, long id){   

            f = (File) parent.getItemAtPosition(position);  
            //Browser

            if (position == 1) {
                if (mCurrentNode.compareTo(mRootNode)!=0) {
                    mCurrentNode = f.getParentFile();
                    refreshFileList();
                Toast.makeText(this, "This is postion 1 "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                //  out();
                }
            } else if (f.isDirectory()) {
                //f.delete();
                mCurrentNode = f;
                refreshFileList();
            Toast.makeText(this, "This is postion 2 "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                    //out();
            } else {
                Toast.makeText(this, "You selected: "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                //out();
            }

                    //});
    }*/




        //end of bundle


    private void refreshFileList() {
        if (mRootNode == null) mRootNode = new File(Environment.getExternalStorageDirectory().toString());
        if (mCurrentNode == null) mCurrentNode = mRootNode; 
        mLastNode = mCurrentNode;
        File[] files = mCurrentNode.listFiles();
        mFiles.clear();
        mFiles.add(mRootNode);
        mFiles.add(mLastNode);
        if (files!=null) {
            for (int i = 0; i< files.length; i++) mFiles.add(files[i]);
        }
        mAdapter.notifyDataSetChanged();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putSerializable("root_node", mRootNode);
        outState.putSerializable("current_node", mCurrentNode);
        outState.putSerializable("last_node", mLastNode);
        super.onSaveInstanceState(outState);
    } 

    /**
     * Listview on click handler.
     */

    @Override
    public void onListItemClick(ListView parent, View v, int position, long id){   

        f = (File) parent.getItemAtPosition(position);  
        //Browser
        ListView lst=null;
    lst.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int position, long id) {
                // TODO Auto-generated method stub
                if (position == 1) {
                    if (mCurrentNode.compareTo(mRootNode)!=0) {
                        mCurrentNode = f.getParentFile();
                        refreshFileList();
                //  Toast.makeText(this, "This is postion 1 "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                    //  out();
                    }
                } else if (f.isDirectory()) {
                    //f.delete();
                    mCurrentNode = f;
                    refreshFileList();
            //  Toast.makeText(this, "This is postion 2 "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                        out();
                } else {
                    //Toast.makeText(this, "You selected: "+f.getName()+"!", Toast.LENGTH_SHORT).show();
                    //out();
                }
                return false;
            }

                });
}
    //@Override

    public void out(){
        Toast.makeText(this, "You selected: "+f.getName()+"!", Toast.LENGTH_SHORT).show();  
    }
}

共 (4) 个答案

  1. # 1 楼答案

    您尚未使用xml listview初始化listview

    ListView lst=null;
    

    在那之后的第行写上:

    lst = (ListView) findViewById(R.id.xmllistviewid);
    

    并将setOnItemLongClickListener方法置于onlistitemclick方法之外

  2. # 2 楼答案

    创建一个setOnItemLongClickListener

    我的代码:

    ListView lv = (ListView) findViewById(R.id.listView1);
            lv.setLongClickable(true);
    
    lv.setOnItemClickListener(new OnItemClickListener()
            {
            public void onItemClick(AdapterView<?> arg0,View arg1,int arg2, long arg3){
                ListView lv = (ListView) findViewById(R.id.listView1);
        // Todo
    
            }});
    
  3. # 3 楼答案

    你可以这样用

    listview.setOnItemLongClickListener(new OnItemLongClickListener() {
    
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int arg2, long arg3) {
    
                               // Can't manage to remove an item here
    
                return false;
            }
    
        });
    
  4. # 4 楼答案

    试试这个:

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {
    
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                        int pos, long id) {
                    // TODO Auto-generated method stub
    
                    Log.v("long clicked","pos"+" "+pos);
    
                    return true;
                }
            }); 
    

    请参阅this链接。它很好地解释了如何在listview中实现onItemClick()onItemLongClick()