我想在导航抽屉的片段页面中显示自定义列表视图。但是,在我的片段类中,我收到的错误似乎无法设置自定义适配器。
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,就像我在片段中做的那样。
我很难解决这个错误。 (抱歉英语不好)。
答案 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);