我有一個抽屜佈局片段(在主要活動中),它顯示了一個可擴展列表,當我單擊擴展項目的一個子項目時,出現一個彈出窗口。這個自定義佈局彈出窗口包含文本視圖,列表視圖和2個按鈕。使用片段列表視圖
我給列表中查看ID:android:id="@android:id/list"
從的ViewGroup在onCreateView函數返回一個空如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_settings, null);
,使類擴展片段不ListFragment
我做了以前的3步驟,以避免「內容具有ID屬性'android.R.id.list'不是ListFragment中的ListView類的視圖」錯誤
但我仍然有NullPointerException錯誤指向
failListView.setAdapter(adapter);
當點擊 「故障安全設置」 項
我已經看到了一些建議,但他們都沒有得到有用的,像 rootView .findViewById?()不getActivity()。findViewById ()==>我已經做到了。 或在onCreateView函數之前聲明列表視圖。 我真的很生氣,我嘗試了很多與他人合作的建議。
即使,我一直在努力,這個片段添加到onActivityCreated功能
TestFailsafeAdapter adapter = new TestFailsafeAdapter(getActivity().getApplicationContext(),
R.layout.dialog,R.id.textView1,
getResources().getStringArray(R.array.failsafe_list));
failListView.setAdapter(adapter);
任何幫助將不勝感激。
以下是在彈出的窗口中使用的自定義佈局(dialog.xml):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/headers_container"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="FailSafe"
android:textSize="16sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/textView1"
android:text="On"
android:textSize="16sp" />
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="350dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/headers_container"
android:background="#ffeeaa" >
</ListView>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_below="@android:id/list"
android:orientation="horizontal" >
<Button
android:id="@+id/dialogButtonReset"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:text="Reset" />
<Button
android:id="@+id/dialogButtonSend"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:text="Send" />
</LinearLayout>
</RelativeLayout>
以下是具有可繪製佈局(SettingsFragment.java)的擴展列表的片段:
public class SettingsFragment extends Fragment {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;
int position = 0;
ListView failListView = null;
public SettingsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// View rootView = inflater.inflate(R.layout.fragment_settings, container, false);
View rootView = inflater.inflate(R.layout.fragment_settings, null);
failListView = (ListView) rootView.findViewById(android.R.id.list);
TestFailsafeAdapter adapter = new TestFailsafeAdapter(getActivity().getApplicationContext(),
R.layout.dialog,R.id.textView1, getResources().getStringArray(R.array.failsafe_list));
failListView.setAdapter(adapter);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
// get the listview
expListView = (ExpandableListView) getActivity().findViewById(R.id.lvExp);
// preparing list data
prepareListData();
listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild);
// setting list adapter
expListView.setAdapter(listAdapter);
// Listview Group click listener
expListView.setOnGroupClickListener(new OnGroupClickListener() {
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
return false;
}
});
// Listview Group expanded listener
expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getActivity(),
listDataHeader.get(groupPosition) + " Expanded",
Toast.LENGTH_SHORT).show();
}
});
// Listview Group collasped listener
expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(getActivity(),
listDataHeader.get(groupPosition) + " Collapsed",
Toast.LENGTH_SHORT).show();
}
});
// Listview on child click listener
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
final int groupPosition, final int childPosition, long id) {
// TODO Auto-generated method stub
if(listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition).equals("USB")){
FragmentManager manager = getFragmentManager();
/** Instantiating the DialogFragment class */
AlertDialogRadio alert = new AlertDialogRadio();
/** Creating a bundle object to store the selected item's index */
Bundle b = new Bundle();
/** Storing the selected item's index in the bundle object */
b.putInt("position", position);
/** Setting the bundle object to the dialog fragment object */
alert.setArguments(b);
/** Creating the dialog fragment object, which will in turn open the alert dialog window */
alert.show(manager, "alert_dialog_radio");
}
if(listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition).equals("Failsafe Setup")){
Toast.makeText(getActivity()," Failsafe Setup",Toast.LENGTH_SHORT).show();
// create a Dialog component
final Dialog dialog = new Dialog(getActivity());
//tell the Dialog to use the dialog.xml as it's layout description
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Failsafe Setup");
ListView failListView = (ListView) dialog.findViewById(android.R.id.list);
Button dialogButtonReset = (Button) dialog.findViewById(R.id.dialogButtonReset);
Button dialogButtonSend = (Button) dialog.findViewById(R.id.dialogButtonSend);
dialogButtonReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity()," Failsafe Reset",Toast.LENGTH_SHORT).show();
}
});
dialogButtonSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity()," Failsafe Send",Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
return false;
} // end of OnClickChild method
});
}
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Adding child data
listDataHeader.add("Connection");
listDataHeader.add("Mission Limits");
listDataHeader.add("Compass Calibration");
listDataHeader.add("Sensor Calibration");
listDataHeader.add("Failsafe");
// Adding child data
List<String> Connection = new ArrayList<String>();
Connection.add("USB");
Connection.add("Wi-Fi");
List<String> MissionLimits = new ArrayList<String>();
List<String> CompassCalibration = new ArrayList<String>();
List<String> SensorCalibration = new ArrayList<String>();
List<String> Failsafe = new ArrayList<String>();
Failsafe.add("Failsafe Setup");
listDataChild.put(listDataHeader.get(0), Connection); // Header, Child data
listDataChild.put(listDataHeader.get(1), MissionLimits);
listDataChild.put(listDataHeader.get(2), CompassCalibration);
listDataChild.put(listDataHeader.get(3), SensorCalibration);
listDataChild.put(listDataHeader.get(4), Failsafe);
}
}
這樣的ListView我怎麼能訪問elemnts在dialog.xml @ρяσѕρєяķ – 2015-04-01 09:29:07
我添加一行SettingsFragment.java類這樣代碼如下所示: \t \t 查看rootView = inflater.inflate(R.layout.fragment_settings,container,false); \t \t rootView2 = inflater.inflate(R.layout.dialog,container,false); \t \t failListView =(ListView)rootView2.findViewById(android.R.id。清單); 所以列表視圖出現,但它是空的,爲什麼項目沒有出現?請幫忙嗎? – 2015-04-02 07:07:13
@jaradat:從onCreateView返回'rootView2' – 2015-04-02 07:08:53