2016-11-14 38 views
-1

我是Android新手。我正在开发一个应用程序在Android中,最低API级别是15和最大API级别是23.
我想like this,另一件事是在子导航中的多项选择项目。当从父导航视图中选择任何项目时,子导航视图将打开,如图所示。我在谷歌搜索,但没有得到答案。我看到this和其他很多堆栈溢出的答案,但没有得到。请如果有人帮助,那么非常感谢。提前感谢。如何开发导航视图内的子导航视图与Android中的多选择?

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
      android:id="@+id/lvList" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/colorPrimary"/> 
</LinearLayout> 

这是我javafile

public class HomePageActivity extends AppCompatActivity 
{ 

    ListView lvList; 

    ArrayList<String> arrayList; 
    NavigationViewAdapter adapter; 

    ArrayList<RowObject> selectedItemArray; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_hope_page); 

     lvList = (ListView)findViewById(R.id.lvList); 

     setUpListView(); 

     lvList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     lvList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      for (int i = 0; i < selectedItemArray.size(); i++) 
      { 
       if (i == position){ 
        selectedItemArray.get(position).setSelectedItem(true); 
       }else{ 
        selectedItemArray.get(i).setSelectedItem(false); 
       } 
      } 
      adapter.notifyDataSetChanged(); 
     } 
    }); 
    } 

    private void setUpListView() 
    { 
     arrayList = new ArrayList<>(); 
     selectedItemArray = new ArrayList<>(); 

     for (int i = 0; i < 20; i++) 
     { 
      arrayList.add("Item "+(i+1)); 
      selectedItemArray.add(new RowObject(i, false)); 
     } 
     adapter = new NavigationViewAdapter(HomePageActivity.this, arrayList, selectedItemArray); 
     if (adapter != null) 
     { 
      lvList.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
     } 
    } 
} 

这是我的适配器

public class NavigationViewAdapter extends BaseAdapter 
{ 
    Activity activity; 

    View itemView; 
    private LayoutInflater inflater; 
    private ViewHolder viewHolder; 

    ArrayList<String> arrayList; 
    ArrayList<RowObject> selectedItemArray; 

    public NavigationViewAdapter(Activity activity, ArrayList<String> arrayList, ArrayList<RowObject> selectedItemArray) 
    { 
     this.activity = activity; 
     this.arrayList = arrayList; 
     this.selectedItemArray = selectedItemArray; 
     inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return arrayList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return arrayList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     try 
     { 
      itemView = convertView; 
      if (convertView == null){ 
       itemView = inflater.from(parent.getContext()).inflate(R.layout.main_activity_item, parent, false); 
       viewHolder = new ViewHolder(); 

       //if this is first time then inflate view 
       viewHolder.itemName = (TextView)itemView.findViewById(R.id.itemName); 
       itemView.setTag(viewHolder); 
      }else{ 
       viewHolder = (ViewHolder)itemView.getTag(); 
      } 

      //set Data from ArrayList 
      viewHolder.itemName.setText(arrayList.get(position)); 

      if (selectedItemArray.get(position).isSelectedItem()){ 
       viewHolder.itemName.setBackgroundColor(activity.getResources().getColor(R.color.colorPrimaryDark)); 
      }else{ 
       viewHolder.itemName.setBackgroundColor(activity.getResources().getColor(R.color.colorPrimary)); 
      } 

      notifyDataSetChanged(); 

      return itemView; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    public class ViewHolder 
    { 
     TextView itemName; 
    } 
} 

这是我RowObject.java

public class RowObject 
{ 
    public int position; 
    boolean isSelectedItem; 

    public RowObject(int position, boolean isSelectedItem) { 
     this.position = position; 
     this.isSelectedItem = isSelectedItem; 
    } 
    public int getPosition() { 
     return position; 
    } 

    public void setPosition(int position) { 
     this.position = position; 
    } 
    public boolean isSelectedItem() { 
     return isSelectedItem; 
    } 

    public void setSelectedItem(boolean isSelectedItem) { 
     this.isSelectedItem = isSelectedItem; 
    } 
} 
+0

您喜欢? 请看[答案](http://stackoverflow.com/questions/17929386/actionbar-menu-items-in-master-detail-flow) – secret35

+0

你会试试什么? – Shailesh

+0

Shailesh Limbadiya我能够生成列表,但我不知道如何添加和显示子导航视图? – Ninja

回答

0

的Android工作室>新建>活动>主/从流量

谷歌文档link

OR

#1 answer

+0

感谢您的回复。这不完全是我想要的,但它的附近,我会检查这一点,并尝试如果我实现。谢谢 – Ninja

0

我觉得这种类型的布局是不是由Android提供的,但你可以使用你的逻辑修复。我认为你需要改变你的xml文件,因为你的列表视图宽度是match_parent,所以你的整个屏幕填满了,你的第二个子菜单不显示。请按照你的要求更改或修复。你的主要xml文件。

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical"> 

     <ListView 
      android:id="@+id/lvList" 
      android:layout_width="100dp" 
      android:layout_height="match_parent" 
      android:background="@color/colorPrimary"/> 

     <ScrollView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/lvList" 
      android:layout_toEndOf="@+id/lvList"> 

      <LinearLayout 
       android:id="@+id/llItemContainer" 
       android:layout_width="200dp" 
       android:layout_height="50dp" 
       android:orientation="vertical" 
       android:background="@color/input_login_hint"> 

      </LinearLayout> 

     </ScrollView> 

    </RelativeLayout> 

</LinearLayout> 

而在你的ListView onItemClickListener添加一个方法()。请参阅我的代码。
java文件

public class NavigationActivity extends AppCompatActivity 
{ 
    ListView lvList; 
    LinearLayout llItemContainer; 

    ArrayList<String> arrayList; 
    NavigationViewAdapter adapter; 

    ArrayList<RowObject> selectedItemArray; 
    ArrayList<String> selectedSecondItem; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.navigation_activity); 

     lvList = (ListView)findViewById(R.id.lvList); 

     setUpListView(); 

     lvList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     llItemContainer = (LinearLayout)findViewById(R.id.llItemContainer); 
     lvList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       for (int i = 0; i < selectedItemArray.size(); i++) 
       { 
        if (i == position){ 
         selectedItemArray.get(position).setSelectedItem(true); 
        }else{ 
         selectedItemArray.get(i).setSelectedItem(false); 
        } 
       } 
       adapter.notifyDataSetChanged(); 

       //here you can pass your sub view item array 
       generateSubView(position); 
      } 
     }); 
    } 

    private void setUpListView() 
    { 
     arrayList = new ArrayList<>(); 
     selectedItemArray = new ArrayList<>(); 

     for (int i = 0; i < 20; i++) 
     { 
      arrayList.add("Item "+(i+1)); 
      selectedItemArray.add(new RowObject(i, false)); 
     } 
     adapter = new NavigationViewAdapter(NavigationActivity.this, arrayList, selectedItemArray); 
     if (adapter != null) 
     { 
      lvList.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
     } 
    } 

    private void generateSubView(int position) 
    { 
     try 
     { 
      selectedSecondItem = new ArrayList<>(); 
      llItemContainer.removeAllViews(); 

      for (int i = 0; i <= position; i++) 
      { 
       final TextView rowText = new TextView(NavigationActivity.this); 
       TableRow.LayoutParams paramsExample = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 
         147,2.0f); 
       rowText.setId(i); 
       rowText.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
       rowText.setGravity(Gravity.CENTER_VERTICAL); 
       rowText.setTextColor(getResources().getColor(android.R.color.white)); 
       paramsExample.setMargins(3, 3, 3, 3); 
       rowText.setPadding(25, 25, 25, 25); 
       rowText.setTextSize(18); 
       rowText.setText("SecondItem " + i); 
       rowText.setLayoutParams(paramsExample); 

       rowText.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         rowText.setBackgroundColor(getResources().getColor(R.color.colorAccent)); 

         selectedSecondItem.add(rowText.getText().toString()); 
        } 
       }); 

       llItemContainer.addView(rowText); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

你从子导航视图中选定项selectedSecondItem数组列表。

+0

谢谢。它的工作魅力。我尝试了最后五天,你节省了我的时间。 – Ninja

+0

很高兴给我。欢迎 – Shailesh