自定义适配器无法应用于导航抽屉的片段

时间:2016-02-22 19:36:36

标签: android listview android-fragments

我想在导航抽屉的片段页面中显示自定义列表视图。但是,在我的片段类中,我收到的错误似乎无法设置自定义适配器。

package android_gcm_client.mynavigation;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.util.ArrayList;
public class List_Fragment extends Fragment {
    View rootview;
    ArrayList prgmName;
public static int [] prgmImages=      {R.drawable.images,R.drawable.images1,R.drawable.images2,R.drawable.images3,R.drawable.images4,R.drawable.images5,R.drawable.images6,R.drawable.images7,R.drawable.images8};
    public static String [] prgmNameList={"Let Us   C","c++","JAVA","Jsp","Microsoft .Net","Android","PHP","Jquery","JavaScript"};

    @Nullable

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview=inflater.inflate(R.layout.custom_layout,container,false);

        CustomAdapter ca = new CustomAdapter(this,prgmNameList,prgmImages);
        ListView listview=(ListView) getView().findViewById(R.id.listView);
        listview.setAdapter(ca);
        return rootview;
    }
}

似乎错误发生在下面的行中(无法应用自定义适配器)。

CustomAdapter ca = new CustomAdapter(this,prgmNameList,prgmImages);

在MainActivity中,我按如下方式调用片段:

public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments

    Fragment objFragment=null;
    switch(position) {
        case 0:
            objFragment=new ListFragment();
            break;
    }

     FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, objFragment)
            .commit();
}

我尝试了不同的方法来显示导航项目选择方法的自定义列表视图。

我试图直接调用活动而不是片段,但问题是导航抽屉对所有活动都不可见。所以我尝试在活动中调用CustomAdapter,就像我在片段中做的那样。

我很难解决这个错误。 (抱歉英语不好)。

1 个答案:

答案 0 :(得分:0)

您在自定义适配器中使用this。通常适配器在构造函数调用中需要Context。但是这个构造函数在片段内调用,this无法使用。

您可以在片段中使用getActivity()作为上下文。的但是。 如果在此片段null之前调用<{1}},则有时会返回onAttach()

CustomAdapter ca = new CustomAdapter(getActivity(), prgmNameList, prgmImages);

您还可以通过在Application类中创建静态变量来使用Application上下文:

public class Application extends android.app.Application {
    public static Context AppContext = null;

    @Override
    public void onCreate() {
        super.onCreate();
        AppContext = getApplicationContext();

        // You can use this line to solve styling problems
        // because Manifest android:theme is not working
        AppContext.setTheme(R.style.AppTheme);
    }
}

并创建这样的适配器:

CustomAdapter ca = new CustomAdapter(Application.AppContext, prgmNameList, prgmImages);