2015-06-28 11 views
9

मैं नेविगेशन ड्रॉर के निम्न कार्यक्षमता प्राप्त करने के लिए कोशिश कर रहा हूँ, लेकिन मैं इसे तोड़ने में सक्षम नहीं हूँ में नई सूची दृश्य पर।नेविगेशन ड्रॉर आइटम क्लिक करें, नेविगेशन ड्रॉर

परिदृश्य: -

मैं एक मार्गदर्शक ड्रॉवर हो रहा है। नेविगेशन ड्रॉवर में किसी भी आइटम पर क्लिक करने पर मुझे इसमें एकाधिक आइटम के साथ खोलने के लिए एक सूची दृश्य की आवश्यकता है, जिसे किसी प्रकार की कार्यक्षमता के लिए और चुना जा सकता है। मैं छवि को भी संलग्न कर रहा हूं जो मेरी ज़रूरत को उचित तरीके से परिभाषित करेगा। मूल रूप से और वास्तव में आवश्यकता के लिए कृपया छवि का एक प्रकार का संदर्भ लें। navigation drawer with multiple list

किसी भी मदद की सराहना की जाएगी ..!

+1

उदाहरण के लिए आप 'ExpandableListView' का उपयोग क्यों नहीं करना चाहते हैं? आप जो चाहते हैं उसके लिए यह सबसे अच्छा अभ्यास होगा। – rom4ek

+0

आपने उल्लेख नहीं किया कि आपके परिदृश्य में क्या नहीं टूट गया? आप दाईं ओर शहर की एक सूची चाहते हैं? या आप मेनू सूची का विस्तार करना चाहते हैं? कृपया अधिक जानें –

+1

सबसे खराब केस समाधान, रैखिक लेआउट अभिविन्यास के साथ दो सूची दृश्य का उपयोग करने के लिए क्षैतिज और सेट दृश्यता दृश्यमान के रूप में दिखाई देगा और आवश्यकता के अनुसार चला जाएगा।लेकिन मैं आपको रोम 4ek समाधान का उपयोग करने के लिए सुझाव देना चाहता हूं। – Chitrang

उत्तर

4

के रूप में मैं अपनी छवि देख मैं क्या समझ है अपने दराज से क्लिक करें, आप एक और सूची दिखाई यह सही पहलू भी है चाहता हूँ। क्या मैं सही हूँ ? अगर मैं सही तो यह ExpandableListView का उपयोग कर, क्योंकि ExpandableListView क्लिक किया आइटम नीचे दिए गए आइटम उत्पन्न होगा संभव नहीं है।

तो एक समाधान यह है कि आप दो सूची दृश्य ले सकते हैं।

पहले ListView दराज और अपने मुख्य सामग्री पर दूसरा एक के अंदर और दोनों ListView के लिए कस्टम एडाप्टर पैदा करते हैं।

अब जब उपयोगकर्ता दराज सूची आइटम पर क्लिक करता है, तो यह पता लगाएं कि कौन सा विकल्प शहर, MyNews या जो कुछ भी क्लिक किया गया है।

क्लिक की पहचान करने के बाद आप दूसरे एडवेंटर को दूसरे सूची दृश्य के लिए भर सकते हैं, जिसके अनुसार उपयोगकर्ता द्वारा क्लिक किया गया विकल्प है। और उस एडाप्टर को दूसरी सूची दृश्य में लागू करें और इसे सूचित करें।

तो जब उपयोगकर्ता ड्रॉवर से किसी अन्य आइटम पर क्लिक करता है तो वही होता है। लेकिन दूसरी सूची दृश्य के लिए डेटा बदलने जा रहे हैं।

मुझे उम्मीद है कि आप समझेंगे कि मैं क्या कह रहा हूं और यह आपकी मदद करता है।

[अद्यतन]

ठीक है तो अपने xml इस तरह दिखना shuold।

नोट: मैं बस इसके लिए एक कंकाल लिख रहा हूं।

<!-- The main content view --> 
<FrameLayout android:id="@+id/content_frame" /> 

<!-- The navigation drawer --> 
<LinearLayout 
    android:layout_gravity="start" 
    android:orientation="horizontal"> 
    <ListView 
     android:layout_weight="1" 
     android:id="@+id/list1"> 
    </ListView> 

    <ListView 
     android:layout_weight="1" 
     android:id="@+id/list2"> 
    </ListView> 
</LinearLayout> 

अब आपका जावा तरफ। विचार दोनों सूचीदृश्य रूप List1 और List2 संदर्भित करते हैं और आपके पास दो एडाप्टर adapter1 और adapter2 बनाया है। List1 के लिए

मेक आइटम क्लिक करें और नीचे की तरह तर्क लागू ...

list1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 

     // now here you can get which option is clicked from list1. 
     // using position and 
     int your_type = pos; 

     adapter2.filderDataAccordingToType(your_type); 
     // create the above method in your second adapter and pass your type like MyNews, City or any other. 
     // and apply the logic of filtering by passing type to your method 
     // your_type could be any data type i have take the integer. 
     // and after filtering data you can notify your adapter. 
     // so when the data of adpater gets changed your secondlistview get refreshed. 
    } 
}); 

यह है कि। मुझे आशा है कि यह आपकी मदद करेगी।

+0

अच्छी तरह से यह सहायक हो सकता है हालांकि। दराज में क्षैतिज सूची दृश्य के साथ रैखिक परत डालें और अपने तर्क को आराम दें। यदि आप इसे सही कर सकते हैं तो कृपया ऐसा करें। ताकि मैं आपका जवाब स्वीकार कर सकूं। –

+0

मैं थोड़ा उलझन में हूं कि आप ड्रॉवर पर एक सूचीदृश्य या दराज पर एक सूचीदृश्य और दराज के बाहर एक और चाहते हैं ..? ताकि मैं सही ढंग से उत्तर अपडेट कर सकूं ... – Moinkhan

+0

दराज पर दोनों। –

3

आप creating a navigation drawer पर एंड्रॉइड डेवलपर्स ट्यूटोरियल का उपयोग कर सकते हैं, लेकिन ListView का उपयोग करने के बजाय, आप ExpandableListView के लिए जाते हैं।

उदाहरण के लिए, कि ट्यूटोरियल में, आप देख सकते हैं कि कोड के पहले खंड में वे एक ListView उपयोग कर रहे हैं। कि करने के बजाय, कुछ इस तरह के लिए इसे बदल:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <ExpandableListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent"/> 
</android.support.v4.widget.DrawerLayout> 

एक ExpandableListView एडाप्टर अच्छी तरह से this ट्यूटोरियल एंड्रॉयड हाइव पर उपलब्ध से समझाया गया है कैसे लागू करने के लिए। मैं यहां उनके कोड पेस्ट नहीं कर रहा हूं क्योंकि यह एक लंबा ट्यूटोरियल है। यदि आपके कोई प्रश्न हैं तो टिप्पणी करें।

0

यहाँ मेरी कोड है।

  • मैं बाल वस्तु के लिए पुनर्चक्रण दृश्य का उपयोग कर रहा हूं।
  • यह शब्दों का विस्तार कर रहा है।
  • मैं 2 लाइब्रेरी का उपयोग कर रहा हूं।

    संकलन 'com.h6ah4i.android.widget.advrecyclerview: advrecyclerview: 0.7.1' संकलन 'com.wnafee: वेक्टर compat: 1.0.5'

यहाँ मार्गदर्शक ड्रॉवर टुकड़ा

है
public class NavigationDrawerFragment extends Fragment implements NavigationDrawerCallbacks { 


private static final String SAVED_STATE_EXPANDABLE_ITEM_MANAGER = "RecyclerViewExpandableItemManager"; 

/** 
* Remember the position of the selected item. 
*/ 
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; 

/** 
* Per the design guidelines, you should show the drawer on launch until the user manually 
* expands it. This shared preference tracks this. 
*/ 
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; 

/** 
* A pointer to the current callbacks instance (the Activity). 
*/ 
private NavigationDrawerCallbacks mCallbacks; 

/** 
* Helper component that ties the action bar to the navigation drawer. 
*/ 
private ActionBarDrawerToggle mActionBarDrawerToggle; 

private DrawerLayout mDrawerLayout; 
private RecyclerView mDrawerList; 
private View mFragmentContainerView; 

private int mCurrentSelectedPosition = -1; 
private boolean mFromSavedInstanceState; 
private boolean mUserLearnedDrawer; 

private Subscription subscription; 

@Inject CategoryService categoryService; 

private MyExpandableItemAdapter expandableItemAdapter; 
private RecyclerView.Adapter wrappedAdapter; 
private RecyclerViewExpandableItemManager expandableItemManager; 
private LinearLayoutManager linearLayoutManager; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    DelhiShopApplication.component().inject(this); 

    // Read in the flag indicating whether or not the user has demonstrated awareness of the 
    // drawer. See PREF_USER_LEARNED_DRAWER for details. 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); 

    if (savedInstanceState != null) { 
     mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); 
     mFromSavedInstanceState = true; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
    mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    mDrawerList.setLayoutManager(layoutManager); 
    mDrawerList.setHasFixedSize(true); 

    if (mCurrentSelectedPosition != -1) { 
     selectItem(mCurrentSelectedPosition); 
    } 
    return view; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    final Parcelable eimSavedState = (savedInstanceState != null) ? savedInstanceState.getParcelable(SAVED_STATE_EXPANDABLE_ITEM_MANAGER) : null; 
    expandableItemManager = new RecyclerViewExpandableItemManager(eimSavedState); 


} 

private void setRecyclerView(Category category) { 
    linearLayoutManager = new LinearLayoutManager(getActivity()); 

    final MyExpandableItemAdapter myItemAdapter = new MyExpandableItemAdapter(category); 
    wrappedAdapter = expandableItemManager.createWrappedAdapter(myItemAdapter); 


    final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); 

    // Change animations are enabled by default since support-v7-recyclerview v22. 
    // Need to disable them when using animation indicator. 
    animator.setSupportsChangeAnimations(false); 

    mDrawerList.setLayoutManager(linearLayoutManager); 
    mDrawerList.setAdapter(wrappedAdapter); // requires *wrapped* adapter 
    mDrawerList.setItemAnimator(animator); 
    mDrawerList.setHasFixedSize(false); 

    // additional decorations 
    //noinspection StatementWithEmptyBody 

// अगर (supportsViewElevation()) { // // लॉलीपॉप या बाद में देशी ड्रॉप शैडो सुविधा है। ItemShadowDecorator की आवश्यकता नहीं है। //} अन्य { // mDrawerList.addItemDecoration (नया ItemShadowDecorator ((NinePatchDrawable) getResources()। GetDrawable (R.drawable // .material_shadow_z1)); //}

expandableItemManager.attachRecyclerView(mDrawerList); 
} 

private boolean supportsViewElevation() { 
    return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP); 
} 

public boolean isDrawerOpen() { 
    return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); 
} 

public ActionBarDrawerToggle getActionBarDrawerToggle() { 
    return mActionBarDrawerToggle; 
} 

public DrawerLayout getDrawerLayout() { 
    return mDrawerLayout; 
} 

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    selectItem(position); 
} 

/** 
* Users of this fragment must call this method to set up the navigation drawer interactions. 
* 
* @param fragmentId The android:id of this fragment in its activity's layout. 
* @param drawerLayout The DrawerLayout containing this fragment's UI. 
* @param toolbar  The Toolbar of the activity. 
*/ 
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent(); 
    mDrawerLayout = drawerLayout; 

    mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myPrimaryDarkColor)); 

    mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string 
      .drawer_open, R.string.drawer_close) { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      if (!isAdded()) { 
       return; 
      } 

      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if (!isAdded()) { 
       return; 
      } 
      if (!mUserLearnedDrawer) { 
       mUserLearnedDrawer = true; 
       SharedPreferences sp = PreferenceManager 
         .getDefaultSharedPreferences(getActivity()); 
       sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); 
      } 
      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 
    }; 

    // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, 
    // per the navigation drawer design guidelines. 
    if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
     mDrawerLayout.openDrawer(mFragmentContainerView); 
    } 

    // Defer code dependent on restoration of previous instance state. 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mActionBarDrawerToggle.syncState(); 
     } 
    }); 

    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); 
} 

private void selectItem(int position) { 
    mCurrentSelectedPosition = position; 
    if (mDrawerLayout != null) { 
     mDrawerLayout.closeDrawer(mFragmentContainerView); 
    } 
    if (mCallbacks != null) { 
     mCallbacks.onNavigationDrawerItemSelected(position); 
    } 
    ((NavigationDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position); 
} 

public void openDrawer() { 
    mDrawerLayout.openDrawer(mFragmentContainerView); 
} 

public void closeDrawer() { 
    mDrawerLayout.closeDrawer(mFragmentContainerView); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mCallbacks = (NavigationDrawerCallbacks) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mCallbacks = null; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); 
    if (expandableItemManager != null) { 
     outState.putParcelable(
       SAVED_STATE_EXPANDABLE_ITEM_MANAGER, 
       expandableItemManager.getSavedState()); 
    } 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Forward the new configuration the drawer toggle component. 
    mActionBarDrawerToggle.onConfigurationChanged(newConfig); 
} 

public void setUserData(String user, String email, Bitmap avatar) { 
    ((TextView) mFragmentContainerView.findViewById(R.id.txtUserEmail)).setText(email); 
    ((TextView) mFragmentContainerView.findViewById(R.id.txtUsername)).setText(user); 
} 

public View getGoogleDrawer() { 
    return mFragmentContainerView.findViewById(R.id.googleDrawer); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    subscription = categoryService.getCategories() 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Action1<Category>() { 
       @Override 
       public void call(Category category) { 
        // sadfksdjf 
        expandableItemAdapter = new MyExpandableItemAdapter(category); 
        mDrawerList.setAdapter(expandableItemAdapter); 
        setRecyclerView(category); 
       } 
      }, new Action1<Throwable>() { 
       @Override 
       public void call(Throwable throwable) { 
        // slkdfj 
       } 

      }); 
} 


@Override 
public void onPause() { 
    subscription.unsubscribe(); 
    super.onPause(); 
} 

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    if (expandableItemManager != null) { 
     expandableItemManager.release(); 
     expandableItemManager = null; 
    } 
} 

यहाँ मेरे विस्तार मद एडाप्टर

public class MyExpandableItemAdapter 
    extends AbstractExpandableItemAdapter<MyExpandableItemAdapter.MyGroupViewHolder, MyExpandableItemAdapter.MyChildViewHolder> { 
private static final String TAG = "MyExpandableItemAdapter"; 

private Category category; 

public static abstract class MyBaseViewHolder extends AbstractExpandableItemViewHolder { 
    public ViewGroup mContainer; 
    public View mDragHandle; 
    public TextView mTextView; 

    public MyBaseViewHolder(View v) { 
     super(v); 
     mContainer = (ViewGroup) v.findViewById(R.id.container); 
     mDragHandle = v.findViewById(R.id.drag_handle); 
     mTextView = (TextView) v.findViewById(android.R.id.text1); 

     // hide the drag handle 
     mDragHandle.setVisibility(View.GONE); 
    } 
} 

public static class MyGroupViewHolder extends MyBaseViewHolder { 
    public MorphButtonCompat mMorphButton; 

    public MyGroupViewHolder(View v) { 
     super(v); 
     mMorphButton = new MorphButtonCompat(v.findViewById(R.id.indicator)); 
    } 
} 

public static class MyChildViewHolder extends MyBaseViewHolder { 
    public MyChildViewHolder(View v) { 
     super(v); 
    } 
} 

public MyExpandableItemAdapter(Category dataProvider) { 
    category = dataProvider; 

    // ExpandableItemAdapter requires stable ID, and also 
    // have to implement the getGroupItemId()/getChildItemId() methods appropriately. 
    setHasStableIds(true); 
} 

@Override 
public int getGroupCount() { 
    return category.getSubCategorySize(); 
} 

@Override 
public int getChildCount(int groupPosition) { 
    return getGroupCategoryAtPosition(groupPosition).getSubCategorySize(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return groupPosition * 100 + childPosition; 
} 

@Override 
public int getGroupItemViewType(int groupPosition) { 
    return 0; 
} 

@Override 
public int getChildItemViewType(int groupPosition, int childPosition) { 
    return 0; 
} 

@Override 
public MyGroupViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) { 
    final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    final View v = inflater.inflate(R.layout.list_group_item, parent, false); 
    return new MyGroupViewHolder(v); 
} 

@Override 
public MyChildViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) { 
    final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    final View v = inflater.inflate(R.layout.list_item, parent, false); 
    return new MyChildViewHolder(v); 
} 

@Override 
public void onBindGroupViewHolder(MyGroupViewHolder holder, int groupPosition, int viewType) { 
    // child item 

    final Category groupItem = getGroupCategoryAtPosition(groupPosition); 

    // set text 
    holder.mTextView.setText(groupItem.getCategoryName()); 

    // mark as clickable 
    holder.itemView.setClickable(true); 

    // set background resource (target view ID: container) 
    final int expandState = holder.getExpandStateFlags(); 

    if ((expandState & RecyclerViewExpandableItemManager.STATE_FLAG_IS_UPDATED) != 0) { 
     int bgResId; 
     MorphButton.MorphState indicatorState; 

     if ((expandState & RecyclerViewExpandableItemManager.STATE_FLAG_IS_EXPANDED) != 0) { 
      bgResId = R.drawable.bg_group_item_expanded_state; 
      indicatorState = MorphButton.MorphState.END; 
     } else { 
      bgResId = R.drawable.bg_group_item_normal_state; 
      indicatorState = MorphButton.MorphState.START; 
     } 

     holder.mContainer.setBackgroundResource(bgResId); 

     if (holder.mMorphButton.getState() != indicatorState) { 
      holder.mMorphButton.setState(indicatorState, true); 
     } 
    } 
} 

@Override 
public void onBindChildViewHolder(MyChildViewHolder holder, int groupPosition, int childPosition, int viewType) { 
    // group item 
    final Category childCategory = getChildCategory(groupPosition, childPosition); 
    // set text 
    holder.mTextView.setText(childCategory.getCategoryName()); 

    // set background resource (target view ID: container) 
    int bgResId; 
    bgResId = R.drawable.bg_item_normal_state; 
    holder.mContainer.setBackgroundResource(bgResId); 
} 


@Override 
public boolean onCheckCanExpandOrCollapseGroup(MyGroupViewHolder holder, int groupPosition, int x, int y, boolean expand) { 

    Category groupCategory = getGroupCategoryAtPosition(groupPosition); 

    if (groupCategory.getSubCategorySize() == 0) { 
     return false; 
    } 

    // check is enabled 
    if (!(holder.itemView.isEnabled() && holder.itemView.isClickable())) { 
     return false; 
    } 

    final View containerView = holder.mContainer; 
    final View dragHandleView = holder.mDragHandle; 

    final int offsetX = containerView.getLeft() + (int) (ViewCompat.getTranslationX(containerView) + 0.5f); 
    final int offsetY = containerView.getTop() + (int) (ViewCompat.getTranslationY(containerView) + 0.5f); 

    return !hitTest(dragHandleView, x - offsetX, y - offsetY); 
} 

private Category getGroupCategoryAtPosition(int groupPosition) { 
    return category.getSubCategory().get(groupPosition); 
} 

private Category getChildCategory(int groupPosition, int childPosition) { 
    return getGroupCategoryAtPosition(groupPosition).getSubCategory().get(childPosition); 
} 


public static boolean hitTest(View v, int x, int y) { 
    final int tx = (int) (ViewCompat.getTranslationX(v) + 0.5f); 
    final int ty = (int) (ViewCompat.getTranslationY(v) + 0.5f); 
    final int left = v.getLeft() + tx; 
    final int right = v.getRight() + tx; 
    final int top = v.getTop() + ty; 
    final int bottom = v.getBottom() + ty; 

    return (x >= left) && (x <= right) && (y >= top) && (y <= bottom); 
} 
} 

है यहाँ मेरी list_group_item.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
style="@style/commonListItemStyle" 
android:layout_width="match_parent" 
android:layout_height="96dp" 
android:layout_marginTop="8dp" 
android:background="#ffffff"> 

<RelativeLayout 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    tools:ignore="UselessParent"> 

    <View 
     android:id="@+id/drag_handle" 
     android:layout_width="32dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:background="#20000000" 
     tools:ignore="RtlHardcoded" /> 

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_toRightOf="@id/drag_handle" 
     android:gravity="center" /> 
</RelativeLayout> 

</FrameLayout> 

list_item है।एक्सएमएल

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
style="@style/commonListItemStyle" 
android:layout_width="match_parent" 
android:layout_height="64dp" 
android:background="@drawable/bg_swipe_item_neutral"> 

<RelativeLayout 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    tools:ignore="UselessParent"> 

    <View 
     android:id="@+id/drag_handle" 
     android:layout_width="32dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:background="#20000000" /> 

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_toRightOf="@id/drag_handle" 
     android:gravity="center" 
     tools:ignore="RtlHardcoded" /> 
</RelativeLayout> 

</FrameLayout> 
संबंधित मुद्दे