簡體   English   中英

ListView項目打開新活動

[英]ListView Item Open New Activity

為了學習Android開發,我仍在關注一些教程,我正在努力開展新的活動。 我只能打開一個活動,實際上ListView上的所有項目都打開了一個活動,這對於位置0(第一個項目)中的ListView項(而不是全部)非常ListView

我的代碼如下:

        // Listen for ListView Item Click
    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(mContext, MyActivity1.class);
            mContext.startActivity(intent);
        }        
    });

    return view;
}

如您所見,MyActivity1.class可以很好地打開,但是如果我有一個名為MyActivity2的第二個類,應該由位置1(第二個項)中的listview項打開,該怎么辦? 還有(View arg0)是什么意思? 我找不到適當的解釋嗎?

使用listview OnItemClickListener

listView.setOnItemClickListener( new OnItemClickListener()
{
       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
       { 
         switch(positon)
         {
             case 0:
                      Intent intent = new Intent(mContext, MyActivity1.class);
                      mContext.startActivity(intent);
             break;
             case 1:
                      Intent intent = new Intent(mContext, MyActivity2.class);
                      mContext.startActivity(intent);
             break;
         }  
       }
});

position是列表項的索引。 因此,您可以根據索引開始相應的活動。

沒有開關盒的另一種方式

String[] classes ={"MyActivity1","MyActivity2"};

然后在onItemClick

String value = classes[position];
Class ourClass =Class.forName("packagename."+value);
Intent intent = new Intent(mContext,ourClass);
mContext.startActivity(intent);

您可以使用Itemclick列表器。

listviewOBJ.setOnItemClickListener( new OnItemClickListener()
{
       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
       { 

       }
});

在這里,您可以使用int position來確定單擊哪個項目。

如果我的理解是正確的,那么這里是您的答案:

對您的主要活動實施OnItemClickListener :然后將偵聽器設置為listviewlistView.setOnItemClickListener(this);

最后:

    private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


   switch(positon)
         {
             case 0:
                      Intent intent = new Intent(mContext, MyActivity1.class);
                      mContext.startActivity(intent);
             break;
             case 1:
                      Intent intent = new Intent(mContext, MyActivity2.class);
                      mContext.startActivity(intent);
             break;
         }  
        }       
    };
public void onClick(View arg0) {

當您單擊某物時,將調用onClick ,並且您單擊的是arg0 (您可以將其稱為viewarg0是如此無用)。

通常,在ButtonsViews中通常使用此回調,但不能與ListView一起使用。

如果要在單擊列表視圖中的項目時打開某些內容,則應使用setOnItemClickListener

AdapterView.OnItemClickListener您具有AdapterView<?> parent, View view, int position, long id參數。

從android doc:

  • parent :單擊發生的AdapterView。
  • view :在AdapterView中被單擊的視圖(這將是適配器提供的視圖)
  • position :單擊的項目的位置(第一個為0,第二個為1,依此類推)
  • id :單擊的項目的行ID。

當您編寫onItemClick您應該記住自己在一個匿名類中! 因此,當您需要將上下文傳遞給new Intent時,就不能使用this

pastesList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        Intent intent = null;
        switch (position)
        {
            case 0:
                intent = new Intent(ActivityClass.this, Class1.class);
                break;
            case 1:
                intent = new Intent(ActivityClass.this, Class2.class);
                break;
            default:
                return;
        }

        startActivity(intent);
    }
});

這條線

ActivityClass.this

當你需要使用的類的實例用於ActivityClass (此時應更換ActivityClass與類名),但它直接使用您不能訪問this其在這里是指new AdapterView.OnItemClickListener()

在您的代碼中,您使用mContext我不知道它是什么,但是我想它是一個上下文。

下次您沒有此變量時,如果需要,請遵循我的建議。

您要使用的是AdapterView.OnItemClickListener

    final ListView list = ...;
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(mContext, MyActivity1.class);
            if (position == 1) {
                intent = new Intent(mContext, MyActivity2.class);
            }
            startActivity(intent);
        }
    });
lv.setOnItemClickListener(n## Heading ##ew OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        // When clicked, show a toast with the TextView text
        if(position == 1) {
            //code specific to first list item    
            Intent myIntent = new Intent(view.getContext(), Html_file1.class);
            startActivityForResult(myIntent, 0);
        }

        if(position == 2) {
            //code specific to 2nd list item    
            Intent myIntent = new Intent(view.getContext(), Html_file2.class);
            startActivityForResult(myIntent, 0);
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM