2017-03-19 11 views
0

私のプロジェクトでYoutubeThumbnailビューを作成したい...私はyoutubeビデオの私のリストのリストビューを使用しています..しかし、私は3私はグーグルでは何も見つかりませんでした。私がactivity_main.xmlにあるボタンをクリックすると、test.xmlの断片を開くはずです。私のビデオのリストはどこですか?アプリケーションがクラッシュします。私は以下のlogcatを与えています。 3日:(InstantiationException:フラグメントではないクラスmyapp.VideoListFragmentをインスタンス化しようとしています

メインActivity.java

public class MainActivity extends AppCompatActivity { 

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

    Button btn = (Button) findViewById(R.id.button); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      android.app.FragmentManager fm = getFragmentManager(); 
      fm.beginTransaction().add(R.id.content_frame, new test()).commit(); 
     } 
    }); 
} 

test.java

public class test extends Fragment { 

View rootview; 


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

} 

VideoListAdapter.java

public class VideoListAdapter extends BaseAdapter implements YouTubeThumbnailView.OnInitializedListener { 

private Context mContext; 
private Map<View, YouTubeThumbnailLoader> mLoaders; 

public VideoListAdapter(final Context context) { 
    mContext = context; 
    mLoaders = new HashMap<>(); 
} 

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

@Override 
public Object getItem(int position) { 
    return YouTubeContent.ITEMS.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

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

    VideoHolder holder; 

    //The item at the current position 
    final YouTubeContent.YouTubeVideo item = YouTubeContent.ITEMS.get(position); 

    if (convertView == null) { 
     //Create the row 
     final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.row_layout, parent, false); 

     //Create the video holder 
     holder = new VideoHolder(); 

     //Set the title 
     holder.title = (TextView) convertView.findViewById(R.id.textView_title); 
     holder.title.setText(item.title); 

     //Initialise the thumbnail 
     holder.thumb = (YouTubeThumbnailView) convertView.findViewById(R.id.imageView_thumbnail); 
     holder.thumb.setTag(item.id); 
     holder.thumb.initialize(mContext.getString(R.string.DEVELOPER_KEY), this); 

     convertView.setTag(holder); 
    } else { 
     //Create it again 
     holder = (VideoHolder) convertView.getTag(); 
     final YouTubeThumbnailLoader loader = mLoaders.get(holder.thumb); 

     if (item != null) { 
      //Set the title 
      holder.title.setText(item.title); 

      //Setting the video id can take a while to actually change the image 
      //in the meantime the old image is shown. 
      //Removing the image will cause the background color to show instead, not ideal 
      //but preferable to flickering images. 
      holder.thumb.setImageBitmap(null); 

      if (loader == null) { 
       //Loader is currently initialising 
       holder.thumb.setTag(item.id); 
      } else { 
       //The loader is already initialised 
       //Note that it's possible to get a DeadObjectException here 
       try { 
        loader.setVideo(item.id); 
       } catch (IllegalStateException exception) { 
        //If the Loader has been released then remove it from the map and re-init 
        mLoaders.remove(holder.thumb); 
        holder.thumb.initialize(mContext.getString(R.string.DEVELOPER_KEY), this); 

       } 
      } 

     } 
    } 
    return convertView; 
} 


@Override 
public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) { 
    mLoaders.put(view, loader); 
    loader.setVideo((String) view.getTag()); 
} 

@Override 
public void onInitializationFailure(YouTubeThumbnailView thumbnailView, YouTubeInitializationResult errorReason) { 
    final String errorMessage = errorReason.toString(); 
    Toast.makeText(mContext, errorMessage, Toast.LENGTH_LONG).show(); 
} 


static class VideoHolder { 
    YouTubeThumbnailView thumb; 
    TextView title; 
} 

VideoListFragment.java

public class VideoListFragment extends ListFragment { 

/** 
* Empty constructor 
*/ 
public VideoListFragment() { 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setListAdapter(new VideoListAdapter(getActivity())); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
} 

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

    final Context context = getActivity(); 
    final String DEVELOPER_KEY = getString(R.string.DEVELOPER_KEY); 
    final YouTubeContent.YouTubeVideo video = YouTubeContent.ITEMS.get(position); 

    switch (position) { 
     case 0: 
      //Check whether we can actually open YT 
      if (YouTubeIntents.canResolvePlayVideoIntent(context)) { 
       //Opens the video in the YouTube app 
       startActivity(YouTubeIntents.createPlayVideoIntent(context, video.id)); 
      } 
      break; 
     case 1: 
      if (YouTubeIntents.canResolvePlayVideoIntentWithOptions(context)) { 
       //Opens in the YouTube app in fullscreen and returns to this app once the video finishes 
       startActivity(YouTubeIntents.createPlayVideoIntentWithOptions(context, video.id, true, true)); 
      } 
      break; 
     case 2: 
      //Issue #3 - Need to resolve StandalonePlayer as well 
      if (YouTubeIntents.canResolvePlayVideoIntent(context)) { 
       //Opens in the StandAlonePlayer, defaults to fullscreen 
       startActivity(YouTubeStandalonePlayer.createVideoIntent(getActivity(), 
         DEVELOPER_KEY, video.id)); 
      } 
      break; 
     case 3: 
      //Issue #3 - Need to resolve StandalonePlayer as well 
      if (YouTubeIntents.canResolvePlayVideoIntentWithOptions(context)) { 
       //Opens in the StandAlonePlayer but in "Light box" mode 
       startActivity(YouTubeStandalonePlayer.createVideoIntent(getActivity(), 
         DEVELOPER_KEY, video.id, 0, true, true)); 
      } 
     break; 

    } 
} 

YouTubeContent.java

public class YouTubeContent { 

/** 
* An array of YouTube videos 
*/ 
public static List<YouTubeVideo> ITEMS = new ArrayList<>(); 

/** 
* A map of YouTube videos, by ID. 
*/ 
public static Map<String, YouTubeVideo> ITEM_MAP = new HashMap<>(); 

static { 
    addItem(new YouTubeVideo("tttG6SdnCd4", "Open in the YouTube App")); 
    addItem(new YouTubeVideo("x-hH_Txxzls", "Open in the YouTube App in fullscreen")); 
    addItem(new YouTubeVideo("TTh_qYMzSZk", "Open in the Standalone player in fullscreen")); 
    addItem(new YouTubeVideo("tttG6SdnCd4", "Open in the Standalone player in \"Light Box\" mode")); 

} 

private static void addItem(final YouTubeVideo item) { 
    ITEMS.add(item); 
    ITEM_MAP.put(item.id, item); 
} 

/** 
* A POJO representing a YouTube video 
*/ 
public static class YouTubeVideo { 
    public String id; 
    public String title; 

    public YouTubeVideo(String id, String content) { 
     this.id = id; 
     this.title = content; 
    } 

    @Override 
    public String toString() { 
     return title; 
    } 
} 

activity_main.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.bucky.myapp.MainActivity"> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" /> 

<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</FrameLayout> 

row_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<!-- Video Thumbnail --> 
<com.google.android.youtube.player.YouTubeThumbnailView 
    android:id="@+id/imageView_thumbnail" 
    android:layout_width="85dp" 
    android:layout_height="85dp" 
    android:layout_alignParentLeft="true" 
    android:layout_margin="5dp" 
    android:background="#000" 
    android:scaleType="centerCrop" /> 


<!-- Video Title --> 
<TextView 
    android:id="@+id/textView_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@id/imageView_thumbnail" 
    android:layout_toRightOf="@id/imageView_thumbnail" 
    android:paddingBottom="5dp" 
    android:paddingRight="5dp" 
    android:text="video_list_title" 
    android:textColor="@android:color/black" 
    android:textSize="15sp" /> 

test.java

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/video_list" 
    android:name="com.example.bucky.myapp.VideoListFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    tools:context=".VideoListActivity" 
    tools:layout="@android:layout/list_content" /> 

`

Logcat。 android.app.Fragment $でInstantiationException:

Process: com.example.bucky.myapp, PID: 18751 
                    android.view.InflateException: Binary XML file line #5: Error inflating class fragment 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
                     at com.example.bucky.myapp.test.onCreateView(test.java:19) 
                     at android.app.Fragment.performCreateView(Fragment.java:2114) 
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904) 
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082) 
                     at android.app.BackStackRecord.run(BackStackRecord.java:834) 
                     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1469) 
                     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:452) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:145) 
                     at android.app.ActivityThread.main(ActivityThread.java:6946) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
                     Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.example.bucky.myapp.VideoListFragment that is not a Fragment 
                     at android.app.Fragment.instantiate(Fragment.java:620) 
                     at android.app.Fragment.instantiate(Fragment.java:596) 
                     at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2125) 
                     at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:178) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:511)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:415)  
                     at com.example.bucky.myapp.test.onCreateView(test.java:19)  
                     at android.app.Fragment.performCreateView(Fragment.java:2114)  
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)  
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)  
                     at android.app.BackStackRecord.run(BackStackRecord.java:834)  
                     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1469)  
                     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:452)  
                     at android.os.Handler.handleCallback(Handler.java:739)  
                     at android.os.Handler.dispatchMessage(Handler.java:95)  
                     at android.os.Looper.loop(Looper.java:145)  
                     at android.app.ActivityThread.main(ActivityThread.java:6946)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at java.lang.reflect.Method.invoke(Method.java:372)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
                     Caused by: java.lang.ClassCastException 
                     at android.app.Fragment.instantiate(Fragment.java:620)  
                     at android.app.Fragment.instantiate(Fragment.java:596)  
                     at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2125)  
                     at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:178)  
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740)  
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:511)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:415)  
                     at com.example.bucky.myapp.test.onCreateView(test.java:19)  
                     at android.app.Fragment.performCreateView(Fragment.java:2114)  
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)  
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)  
                     at android.app.BackStackRecord.run(BackStackRecord.java:834)  
                     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1469)  
                     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:452)  
                     at android.os.Handler.handleCallback(Handler.java:739)  
                     at android.os.Handler.dispatchMessage(Handler.java:95)  
                     at android.os.Looper.loop(Looper.java:145)  
                     at android.app.ActivityThread.main(ActivityThread.java:6946)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at java.lang.reflect.Method.invoke(Method.java:372)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
+0

をロードしてみ 'によって引き起こされるクラスcom.example.bucky.myapp.VideoListFragmentをインスタンス化しようとすると、断片ではない? –

+0

それを解決する方法 – prashant

+0

'R.layout.test'が既に**フラグメント**から断片にロードされています。 'test.java'はまったく必要ありません –

答えて

0

実際ListFragmentこのメッセージを何

setContentView(R.layout.activity_main); 

Button btn = (Button) findViewById(R.id.button); 

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     getFragmentManager() 
      .beginTransaction() 
      .add(R.id.content_frame, new VideoListFragment()) 
      .commit(); 
    } 
}); 
関連する問題