2014-01-22 27 views
2
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

import com.actionbarsherlock.app.SherlockFragment; 

public class FragmentTab2 extends SherlockFragment { 

    private String[]names = {"Video", "Audio"}; 
    private String[]urls = {"http://c172200.r0.cf3.rackcdn.com/104824.mp4", "http://c172200.r0.cf3.rackcdn.com/106973.mp4"}; 

    @Override 
    public View onCreateView(LayoutInflater inflater1, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Get the view from fragmenttab2.xml 
     View view = inflater1.inflate(R.layout.fragmenttab2, container, false); 

     return view; 

     ListView lv = (ListView)findViewById(R.id.List); 
     VideoAdapter adapter = new VideoAdapter(this, names, urls); 
     lv.setAdapter(adapter); 

    } 
} 

我想在fragmenttab中做一個listview。我使用教程創建了界面。 http://www.youtube.com/watch?v=54wC1lgmbKQ在視頻中你可以看到應用程序。我不確定在哪裏聲明和聲明適配器。現在我在fragmenttab1活動中聲明瞭它自己,但是這會導致出現錯誤,並說「未定義構造函數」和「方法findViewById(int)未定義在類型FragmentTab2中」。誰能幫我?這將真正推動我的學校項目。提前致謝!如何在片段中聲明Adapter?

適配器的代碼:

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.TextView; 

public class VideoAdapter extends ArrayAdapter<String> { 
      private final Context context; 
      private final String[] names; 
      private final String[] urls; 

      public VideoAdapter(Context context, String[] names, String[] urls) { 
      super(context, R.layout.videorow, names); 
      this.context = context; 
      this.names = names; 
      this.urls = urls; 
      } 

      @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.videorow, parent, false); 
      TextView textView = (TextView) rowView.findViewById(R.id.textView2); 
      Button button = (Button) rowView.findViewById(R.id.grootheden); 
      textView.setText(names[position]); 
      button.setTag(urls[position]); 

      button.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setDataAndType(Uri.parse((String) v.getTag()), "video/mp4"); 
        context.startActivity(intent); 

       } 
      }); 

      return rowView; 
      } 
     } 

回答

1

試試這個:

ListView lv = (ListView)findViewById(R.id.List); 

應該是:

ListView lv = (ListView) view.findViewById(R.id.List); 

編輯:

另外,您需要返回onCreate()結束處的視圖;

return view; 

您的代碼,固定

public class FragmentTab2 extends SherlockFragment { 

    private String[]names = {"Video", "Audio"}; 
    private String[]urls = {"http://c172200.r0.cf3.rackcdn.com/104824.mp4", "http://c172200.r0.cf3.rackcdn.com/106973.mp4"}; 

    @Override 
    public View onCreateView(LayoutInflater inflater1, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Get the view from fragmenttab2.xml 
     View view = inflater1.inflate(R.layout.fragmenttab2, container, false); 

     ListView lv = (ListView) view.findViewById(R.id.List); 
     VideoAdapter adapter = new VideoAdapter(this, names, urls); 
     lv.setAdapter(adapter); 

     return view; 
    } 
} 
+0

非常感謝!它變成「這個」應該是「getActivity()」。但感謝您的幫助! – afreauxsamurai

相關問題