2

У меня возникли проблемы с щелчком на элементах ListView во фрагментах. Я написал код, чтобы фрагменты указывали на файлы макета для всего и внутри 2 макетов были ListViews, которые извлекают свои записи из элементов в массив строк в файле strings.xml. Я не мог найти способ реализовать setOnItemClickListener для каждого элемента ListView в моем случае из-за того, как я написал код.setOnItemClickListener для ListView во фрагменте

MainActivity.java

package com.example.test_app; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.view.Menu; 

public class MainActivity extends FragmentActivity{ 
    ViewPager ViewPager = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ViewPager= (ViewPager) findViewById(R.id.pager); 
     FragmentManager fragmentManager=getSupportFragmentManager(); 
     ViewPager.setAdapter(new AdapterActivity(fragmentManager)); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
    } 
} 

AdapterActivity.java

package com.example.test_app; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class AdapterActivity extends FragmentStatePagerAdapter{ 
    public AdapterActivity(FragmentManager fm){ 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int i){ 
     Fragment fragment=null; 
     if(i==0){ 
      fragment=new HomeFragment(); 
     } 
     if(i==1){ 
      fragment=new CommunityFragment(); 
     } 
     if(i==2){ 
      fragment=new ResourcesFragment(); 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount(){ 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position){ 
     if(position==0){ 
      return "Home Page"; 
     } 
     if(position==1){ 
      return "Community"; 
     } 
     if(position==2){ 
      return "Resources"; 
     } 
     return null; 
    } 
} 
class HomeFragment extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.home_fragment, container, false); 
    } 
} 
class CommunityFragment extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.community_fragment, container, false); 
    } 
} 
class ResourcesFragment extends Fragment{ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.resources_fragment, container, false); 
    } 
} 

Затем в макете resources_fragment.xml, есть ListView

<ListView 
     android:id="@+id/resourcesListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:entries="@array/categories" > 
</ListView> 

Она захватывает записи из strings.xml

<string-array name="categories"> 
     <item>Category 1</item> 
     <item>Category 2</item> 
     <item>Category 3</item> 
     <item>Category 4</item> 
     <item>Category 5</item> 
     <item>Category 6</item> 
     <item>Category 7</item> 
     <item>Category 8</item> 
</string-array> 

Я использовал this link to create my ListView, но setOnItemClickListener не будет работать для меня. Как еще я могу подключить к каждому элементу списка другие действия?

ответ

8

Место для добавления вашего ListView.SetOnItemClickListener находится в коде создания фрагмента после того, как вы включите макеты. Используйте findViewById, чтобы найти ListView и добавить слушателя setOnItemClick.

class ResourcesFragment extends Fragment{ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

     View view = inflater.inflate(R.layout.resources_fragment, container, false); 
     ListView lv = (ListView) view.findViewById(R.id.mylistviewid); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 
       // TODO Auto-generated method stub 

         String category = categories[position]; 
         Class activityClass = lookupActivityClass_byName(category); 
         //You could lookup by position, but "name" is more general 

         Intent intent = new Intent(getActivity(), activityClass); 
         startActivity(intent); 


      } 
     }); 

     return view; 

    } 
+1

Большое спасибо! Я только начал изучать развитие Android, поэтому это немного сложно понять. Однако я не совсем уверен, как будет работать содержимое onItemClick. Я хочу, чтобы каждый элемент списка запускал новое действие при нажатии, поэтому я создам класс для каждой категории, и каждый класс начнет новое действие. Как написать код внутри onItemClick для каждого элемента списка? – apoorvk

+0

Код, который я добавил в onItemClick, содержит схему того, что вам нужно сделать. – NameSpace

+0

Я думаю, что я понял, я должен добавить String Array до String category = categories [position]? Пример: Строковые категории [] = {«Категория 1», «Категория 2», «Категория 3», «Категория 4», «Категория 5», «Категория 6», «Категория 7», «Категория 8»}; Но lookupActivityClass_byName по-прежнему «не определено для типа new AdapterView.OnItemClickListener() {} – apoorvk

3

При использовании Fragment, вы можете найти взгляды внутри onCreateView(). В более простом смысле это то же самое, что и у onCreate() от Activity.

В этом случае найдите ListView внутри onCreateView() и назначьте onItemClickListener.

Смежные вопросы