如何在片段中声明Adapter?

时间:2014-01-22 23:24:19

标签: java android android-fragments declaration listadapter

    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活动,但这会导致出现错误,说“未定义的构造函数”和“FragmentTab2类型中未定义的方法findViewById(int)”。谁能帮我?这真的会推动我的学校项目。提前致谢!

适配器的代码:

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 个答案:

答案 0 :(得分:1)

试试这个:

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

应该是:

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

编辑:

此外,您需要在onCreate();

的END处返回视图
 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;
    }
}