तो AppCompat समर्थन लाइब्रेरी के v23.2 रिलीज के साथ, मैंने BottomSheetDialogFragment का उपयोग करने का निर्णय लिया। जब मैं किसी सूचीदृश्य में किसी आइटम पर क्लिक करता हूं (एडाप्टर के साथ झुका हुआ है, तो यह एक कर्सर का प्रतिनिधित्व करता है) मैं नीचे शीट खोलने की कोशिश कर रहा हूं। क्लिक करने पर, मैं कर्सर की आईडी को डायलॉगफ्रैगमेंट में पास करता हूं और सामग्री प्रदाता को नीचे की शीट भरने की आवश्यकता होती है।BottomSheetDialogFragment - सामग्री को लपेटने और पूरी तरह प्रदर्शित करने के लिए कैसे?
यह सब ठीक काम करने लगता है, समस्या अब यह है कि जब नीचे की शीट खुलती है, तो मुझे केवल शीर्ष टेक्स्टव्यू दिखाई देता है, जबकि मैं इसे नीचे की चादर पर पूरा लेआउट प्रदर्शित करना चाहता हूं।
यहाँ मैं अब है:
1) टुकड़ा है कि ListView होता है, नीचे चादर संवाद को खोलने के लिए में:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int clickedPersonId = ((Cursor) mListView.getItemAtPosition(position)).getInt(FriendsFragment.COL_PERSONS_ID);
Log.v("FriendsFragment", "Clicked person with personid = " + clickedPersonId);
PersonBottomSheetFragment personBSDF = PersonBottomSheetFragment.newInstance(clickedPersonId);
personBSDF.show(getFragmentManager(), "BOTTOM_SHEET_PERSON");
}
});
2) fragment_person_bottom_sheet.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_person_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/fragment_person_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_account_circle_white_36"
android:drawablePadding="10dp"
android:drawableStart="@drawable/ic_account_circle_white_36"
android:gravity="center_vertical"
android:text="Username"
android:textAllCaps="false"
android:textSize="18sp" />
<TextView
android:id="@+id/fragment_person_personname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_account_circle_white_36"
android:drawablePadding="10dp"
android:drawableStart="@drawable/ic_account_circle_white_36"
android:gravity="center_vertical"
android:text="Person name"
android:textAllCaps="false"
android:textSize="18sp" />
<TextView
android:id="@+id/fragment_person_dob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_account_circle_white_36"
android:drawablePadding="10dp"
android:drawableStart="@drawable/ic_account_circle_white_36"
android:gravity="center_vertical"
android:text="Date of birth"
android:textAllCaps="false"
android:textSize="18sp" />
<TextView
android:id="@+id/fragment_person_location_country"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_account_circle_white_36"
android:drawablePadding="10dp"
android:drawableStart="@drawable/ic_account_circle_white_36"
android:gravity="center_vertical"
android:text="Country"
android:textAllCaps="false"
android:textSize="18sp" />
</LinearLayout>
तो मूल रूप से मुझे केवल पहले टेक्स्टव्यू दिखाई देता है, बाकी को देखने के लिए उपयोगकर्ता को अब नीचे की शीट को खींचना होगा। (हालांकि LinearLayout ऊंचाई सेट के लिए wrap_content गया है।)
3) PersonBottomSheetFragment.java
public class PersonBottomSheetFragment extends BottomSheetDialogFragment
implements LoaderManager.LoaderCallbacks<Cursor> {
public final int PERSONBOTTOMSHEETFRAGMENT_LOADER = 18567; // TODO
TextView usernameView;
TextView personnameView;
TextView dobView;
TextView locationCountryView;
public PersonBottomSheetFragment() {
;
}
public static PersonBottomSheetFragment newInstance(int personid) {
PersonBottomSheetFragment frag = new PersonBottomSheetFragment();
Bundle argsBundle = new Bundle();
argsBundle.putInt("personid", personid);
frag.setArguments(argsBundle);
return frag;
}
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_person_bottom_sheet, null);
usernameView = (TextView) view.findViewById(R.id.fragment_person_username);
personnameView = (TextView) view.findViewById(R.id.fragment_person_personname);
dobView = (TextView) view.findViewById(R.id.fragment_person_dob);
locationCountryView = (TextView) view.findViewById(R.id.fragment_person_location_country);
getLoaderManager().initLoader(PERSONBOTTOMSHEETFRAGMENT_LOADER, null, this);
return view;
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
Uri personsWithIDUri = DataContract.PersonsEntry.buildPersonsUri(getArguments().getInt("personid"));
return new CursorLoader(getActivity(),
personsWithIDUri,
UserFragment.PERSONFRAGMENT_COLUMNS,
null,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data == null || !data.moveToFirst()) {
// null or empty cursor
return;
}
usernameView.setText(data.getString(UserFragment.COL_PERSONS_USERNAME));
personnameView.setText(data.getString(UserFragment.COL_PERSONS_PERSONNAME));
dobView.setText(data.getString(UserFragment.COL_PERSONS_DOB));
locationCountryView.setText(data.getString(UserFragment.COL_PERSONS_LOCATION_COUNTRY));
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
}
किसी भी बिंदु पर मैं दोनों को लागू करने की कोशिश कर रहा हूँ। कारण मैं क्रिएटिव्यू पर उपयोग कर रहा हूं: जैसा कि आप डायलॉगफ्रैगमेंट के लिए प्रलेखन में देख सकते हैं, आप अभी भी विशिष्ट मामलों में एम्बेडेड टुकड़े के रूप में सामग्री का उपयोग कर सकते हैं (http://developer.android.com/reference/android/app/DialogFragment। एचटीएमएल # DialogOrEmbed)। न तो मैं देखता हूं कि यह मुझे किस वास्तविक समस्या का सामना करता है। – CounterFlame
सुपरक्लास लागू करता है क्रिएटडिअलॉग –
जैसा कि आप आधिकारिक दस्तावेज में देख सकते हैं, दोनों का उपयोग करने में कोई समस्या नहीं है। – CounterFlame