ArrayAdapter가 전달된 TextView를 사용하지 않는 이유는 무엇입니까?
-
26-12-2019 - |
문제
기본 활동 레이아웃에 정의된 ListView를 사용하는 탐색 서랍이 있습니다.
<!-- Navigation drawer (left) -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp"
android:background="#e5e5e5"/>
그리고 나는 그것을 다음과 같이 채웁니다:
navMenuItems = getResources().getStringArray(R.array.NavMenuItems);
navDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
navDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.nav_list_item, navMenuItems));
다음과 같이 ArrayAdapter
TextView 리소스 ID를 전달해야 하므로 메뉴 항목에 TextView만 포함된 별도의 레이아웃 파일을 사용합니다.
nav_list_item.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nav_menu_text"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="right"
android:gravity="right"
android:layoutDirection="rtl"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:paddingRight="8dp"
android:textColor="@android:color/white"
android:textSize="50sp"
android:textIsSelectable="true"
android:textAlignment="textStart"
android:textDirection="anyRtl" >
</TextView>
하지만, TextView는 아무런 효과가 없으며 어떤 속성이 변경되더라도 메뉴 항목은 동일하게 표시됩니다!
왜 이런 일이 발생합니까?내가 여기서 뭘 잘못하고 있는 걸까?
해결책 4
해결책을 찾았습니다.
탐색 목록에 대한 사용자 정의 어댑터를 만들었습니다. getView()
(@override) 내 것을 사용했습니다. textView
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
Log.d("Log", "Null v");
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.nav_list_item, null);
}
String s = values.get(position);
TextView textView = (TextView) v.findViewById(R.id.nav_menu_text);
textView.setText(s);
return v;
}
이제 textView
효력을 발휘합니다.
다른 팁
리소스에서는 다음을 제공해야 합니다. layout
대신에 id
텍스트 보기
new ArrayAdapter<String>(this, R.layout.'yourlayoutname', navMenuItems)
어댑터가 navitem의 콘텐츠를 매핑할 뷰를 알 수 있도록 매개변수를 추가해야 합니다.
세 번째 매개변수로 텍스트뷰의 ID를 추가합니다.이와 같이:
new ArrayAdapter<String>(this, R.layout.nav_list_item, R.id.nav_menu_text, navMenuItems)
대신에
new ArrayAdapter<String>(this, R.layout.nav_list_item, navMenuItems)
확실하지는 않지만 텍스트 뷰의 ID를 사용하고 싶지 않은 경우 id 필드 이름을 android.R.layout.simple_list_item_1의 텍스트 뷰 ID인 "text01"로 지정하면 작동할 수 있습니다.
이 시도:
new ArrayAdapter<String> (Context context, R.layout.nav_list_item, R.id.nav_menu_text, navMenuItems);
이것이 당신에게 도움이 되기를 바랍니다...
제휴하지 않습니다 StackOverflow