2016-11-14 4 views
-1

저는 Android에서 새로운입니다. 안드로이드에서 하나의 앱을 개발 중이며 최소 API 레벨은 15이고 최대 API 레벨은 23입니다.
like this을 원하고 또 다른 것은 하위 탐색에서 다중 선택 항목입니다. 상위 탐색보기에서 항목을 선택하면 이미지와 같이 하위 탐색보기가 열립니다. Google에서 검색하지만 답변을받지 못합니다. this 및 다른 많은 스택 오버플로 응답을 볼 수는 있지만 가져 오는 것은 아닙니다. 제발 좀 도와 주시면 감사하겠습니다. 미리 감사드립니다.안드로이드에서 다중 선택이있는 하위 탐색보기 내에서 탐색보기를 개발하는 방법은 무엇입니까?

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> 

이이 내 어댑터

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; 
    } 
} 

내 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(); 
     } 
    } 
} 

인이 내 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

안드로이드 스튜디오> 새로 만들기> 활동> 마스터/세부 정보 흐름

구글 문서 도구 link

또는

유래 answer

+0

답장을 보내 주셔서 감사합니다. 그것은 정확히 내가 원하는 것은 아니지만 근처에있어, 나는 이것을 확인하고 내가 성취한다면 시도 할 것이다. 감사합니다 – Ninja

0

나는 레이아웃 이러한 유형의 안드로이드에서 제공하지 않는 생각하지만 당신은 할 수 귀하의 논리를 사용하여 고정. 목록 뷰 너비가 match_parent이므로 전체 화면이 채워지고 두 번째 하위 메뉴가 표시되지 않도록 XML 파일을 변경해야한다고 생각합니다. 요구 사항에 따라 수정하거나 수정하십시오. 주요 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> 

그리고 당신의 목록보기 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의 ArrayList에서 하위 탐색보기에서 선택한 항목을 얻을.

+0

고마워요. 그 일의 매력. 지난 5 일간 노력해. 내 시간을 절약 해. – Ninja

+0

나에게 기쁩니다. 환영합니다. – Shailesh