2016-03-31 7 views
0

現在、私は成功したアプリケーションのカスタムリストビューを作成しようとしています。しかし、私が持っている問題は、リストビューを主なアクティビティに配置すると、リストビューはテキストとイメージの両方を表示する予定通りに機能するということです。しかし、私のアプリケーションでは、私はページ間でスワイプする機能を持っています。このリストビューを主な活動ページに永久的に表示するのではなく、フラグメントページに必要です。ワインリストページを開いて、次のページにスワイプするともっと長く知ることができますAndroid Studioカスタムリストビューをフラグメントに表示する必要があります

リストビューをフラグメントページに変更しようとすると、null例外エラーが発生します。これは、ユーザーがスワイプするまでページが推測されていないと推測されます。

私は、以下のイメージを含めて、私が意味することを実証しました。

Listview on Main Activity

私のアプリケーションは

カスタムアダプタクラスを設定 -

class CustomAdapter extends ArrayAdapter<String> { 


public CustomAdapter(Context context, String[] names) { 
    super(context, R.layout.custom_row, names); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater hadleighsInflater = LayoutInflater.from(getContext()); 
    View customView = hadleighsInflater.inflate(R.layout.custom_row, parent, false); 

    String singleName = getItem(position); 
    TextView hadleighText = (TextView) customView.findViewById(R.id.hadleighText); 
    ImageView hadleighImage = (ImageView) customView.findViewById(R.id.myimageView); 

    hadleighText.setText(singleName); 
    hadleighImage.setImageResource(R.drawable.imageresize); 
    return customView; 




} 
} 

主な活動 - 私は私のリストビューを表示したい

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainwindow); 





    viewPager = (ViewPager)findViewById(R.id.swipeView); 
    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext())); 

    // Currently set up to the list view on the main activity 


    String[] names = {"Hadleigh", "james", "LOLLLO"}; 
    ListAdapter hadleighsAdapter = new socialdeveloper.adgestonevineyard.CustomAdapter(this,names); 
    ListView hadleighsListView = (ListView)findViewById(R.id.myListview); 
    hadleighsListView.setAdapter(hadleighsAdapter); 


    tabLayout = (TabLayout) findViewById(R.id.tabSwipe); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 

     } 

WineList断片(オン)-----

public class WineList extends Fragment{ 




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


} 



} 

したがって、基本的に現在の主なアクティビティが、フラグメントページに表示するために実装する必要がある変更はわかりません。

Example of what I'm trying to achieve

+0

これはあなたのフラグメントである場合 - >あなたのリストビューを表示したいWineListは、単にそれにListViewコントロールを追加し、すべてのthats!また、ビューオブジェクトをinflateして作成して返します。 –

+0

リストビューをワインリストXMLに追加してから、メインアクティビティクラスに直接追加することができます。コードを編集する方法の例を教えてください。 – james

+0

何らかの理由でこのウェブサイトに答えを出すことができません –

答えて

0

あなたViewPagerFragment年代を表示したい場合 - FragmentStatePagerAdapterを使用しています。 FragmentListViewでレイアウトを作成します。

一部のパラメータを使用してFragmentの新しいインスタンスの静的メソッドを作成します。このパラメータを使用すると、現在のFragmentの異なる値を持つアダプタをListViewに設定できます。


複雑な場合は、tutorialに従ってください。
ImageViewListViewに置き換え、上記の考え方を実装してください。

0

この完全なコードも使用できます。私はあなたのサンプル画像に見えるもののために働きます。

まず、これをビルドに追加します。Gradleの

compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.android.support:support-annotations:23.1.1' 

WineListActivity

//imports 
    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 java.util.ArrayList; 
    import java.util.List; 


    public class WineListActivity extends AppCompatActivity { 

     ViewPager viewPager; 

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

      viewPager = (ViewPager) findViewById(R.id.viewpager); 
      if (viewPager != null) { 
       setupViewPager(viewPager); 
       viewPager.setOffscreenPageLimit(3); 
      } 

      TabLayout tabLayout = (TabLayout) findViewById(R.id.viewpager); 
      tabLayout.setupWithViewPager(viewPager); 


     } 


     private void setupViewPager(ViewPager viewPager) { 
      Adapter adapter = new Adapter(getSupportFragmentManager()); 
      adapter.addFragment(new InformationFragment(), "INFORMATION"); 
      adapter.addFragment(new HomeWebsitesFragment(), "LISTVIEW"); 
      adapter.addFragment(new HomeFragment(), "HOME"); 
      viewPager.setAdapter(adapter); 
     } 


     static class Adapter extends FragmentPagerAdapter { 
      private final List<Fragment> mFragments = new ArrayList<>(); 
      private final List<String> mFragmentTitles = new ArrayList<>(); 

      public Adapter(FragmentManager fm) { 
       super(fm); 
      } 

      public void addFragment(Fragment fragment, String title) { 
       mFragments.add(fragment); 
       mFragmentTitles.add(title); 
      } 

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

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

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

のXmlレイアウト、activity_winelist

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#bdc3c7" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 


</LinearLayout> 

あなたのリスト・フラグメント、ListFragment

public class ListFragment extends Fragment { 

    public static final String ARG_PAGE = "ARG_PAGE"; 
    private int mPage; 

    public static ListFragment newInstance(int page) { 
     Bundle args = new Bundle(); 
     args.putInt(ARG_PAGE, page); 
     ListFragment fragment = new ListFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     ListView listview = (ListView) findViewById(R.id.listview); 
     String[] values = new String[] { "wine 1", "wine 2", "wine 3", 
       "wine 4" }; 

     ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      list.add(values[i]); 
     } 

     MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, list); 
     if(list.size() == 0){ 
      listview.setEmptyView(findViewById(R.id.emptyview)); 
     } 
     listview.setAdapter(adapter); 
    } 


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

     View view = inflater.inflate(R.layout.fragment_list, container, false); 
     return view; 
    } 

} 

あなたのリスト、List.xmlの

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:padding="6dip" > 

     <TextView 
      android:id="@+id/label" 
      android:layout_width="fill_parent" 
      android:layout_height="26dip" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:text="Description" 
      android:textSize="12sp" /> 


    </RelativeLayout> 

あなたのアダプタ、MySimpleArrayAdapter

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 

     private final Context context; 
     private final List<String> values; 


      public MySimpleArrayAdapter(Context context, List<String> values) { 
       super(context, -1, values); 
       this.context = context; 
       this.values = values; 
      } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View rowView = inflater.inflate(R.layout.list, parent, false); 
      TextView textView = (TextView) rowView.findViewById(R.id.label); 
      textView.setText(values.get(position)); 

      return rowView; 
     } 

    } 

そして、あなたは他の二つのフラグメントを追加し、あなたも一緒に願っ今まで何を行うことができます。

HomeFragment

public class HomeFragment extends Fragment { 

     public static final String ARG_PAGE = "ARG_PAGE"; 
     private int mPage; 

     public static HomeFragment newInstance(int page) { 
      Bundle args = new Bundle(); 
      args.putInt(ARG_PAGE, page); 
      HomeFragment fragment = new HomeFragment(); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //mPage = getArguments().getInt(ARG_PAGE); 
     } 


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

      View view = inflater.inflate(R.layout.fragment_home, container, false); 
      return view; 
     } 

    } 

InformationFragment

public class InformationFragment extends Fragment { 

     public static final String ARG_PAGE = "ARG_PAGE"; 
     private int mPage; 

     public static InformationFragment newInstance(int page) { 
      Bundle args = new Bundle(); 
      args.putInt(ARG_PAGE, page); 
      InformationFragment fragment = new InformationFragment(); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //mPage = getArguments().getInt(ARG_PAGE); 
     } 


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

      View view = inflater.inflate(R.layout.fragment_information, container, false); 
      return view; 
     } 

    } 
+0

こんにちはHtml Tosin現在、私はすべてのものをまとめるためにエラーの音色を得ています。あなたのアンドロイドファイルを私に送ってもらえますか?それでは、私はそれから仕事をすることができますか?私はまだ初心者です:D – james

+0

これは簡単にするために私のコードを編集しますが、どのエラーが出ていますか? –

+0

フラグメントページを作成するときにfindViewByIdセクションが認識されないので、主にエラーが発生します。 11時にはこの問題は解決されました。17.32 – james

関連する問題