0

Здравствуйте, ребята, пожалуйста, помогите Noob здесь, который только начинает изучать Android. В основном у меня есть активность, которая имеет TextView и на каждом Textview, который я установил onfocusListener, и все работает отлично. вот код для примера расположение страны ВеликобританияКак ListView OnFocusChangeListener в элементах списка массивов xml

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="50.0dip" 
     android:background="@drawable/button5_background"> 
     <ImageView 
      android:layout_width="65dp" 
      android:layout_height="104dp" 
      android:id="@+id/afrflag" 
      android:layout_gravity="center_vertical" 
      android:src="@drawable/ukflag" /> 
     <TextView 
      android:background="@drawable/custom_selector" 
      android:id="@+id/uk" 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" 

      android:text="@string/uk" 
      android:textColor="@color/white" 
      android:textSize="18.0sp" 
      android:focusable="true" 
      android:focusableInTouchMode="true" /> 
    </LinearLayout> 

здесь код OnFocusChangeListener для Великобритании

TextView btnuk = (TextView) findViewById(R.id.uk); 
    btnuk.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      if (hasFocus) { 
       videoList.clear(); 
       fetchVideouk(); 
      } 
     } 

    }); 

так что я решил поиграться и сделать arrays.xml и поставить все страны, туда и идти попробуйте listview вместо TextView, что мне пришлось создать так много строк, действующих как кнопки.

вот мой array.xml

<string-array 
     name="countryView"> 
     <item>@string/uk</item> 
     <item>@string/frn</item> 
     <item>@string/ita</item> 
     <item>@string/ger</item> 

    </string-array> 
</resources> 

и XML для ListView

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/custom_selector"> 

     <ListView 
      android:background="@drawable/button5_background" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/country_names" 
      android:entries="@array/countryView" 
      /> 
    </LinearLayout> 

с указанным кодом я вижу названия стран нагрузить на мой взгляд, но я не знать, как установить onfocus на каждый пункт (страна)

ListView listView; 
    String[] uk; 


    uk = getResources().getStringArray(R.array.countryView); 

    listView = (ListView) findViewById(R.id.country_names); 

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, uk); 
    listView.setAdapter(adapter); 


    listView.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      if (hasFocus) { 
       videoList.clear(); 
       fetchVideosuk(); 
      } 
     } 

    }); 

Как настроить onfocus для следующего элемента? пример ger, Ita и т. д. Я уверен, что это неверно, но я не понимаю, как это сделать?

+0

Не могли бы вы поставить некоторые снимки экрана, определяющие, чего именно вы хотите достичь? – EEJ

ответ

0

Для этого вам необходимо создать пользовательский адаптер.

row_layout.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"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" 
     android:textSize="20sp"/> 

</LinearLayout> 

MyAdapter.java

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class MyAdapter extends ArrayAdapter<String> { 

    public MyAdapter(Context context, String[] values){ 
     super(context, R.layout.row_layout, values); 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = LayoutInflater.from(getContext()); 

     View view = inflater.inflate(R.layout.row_layout, parent, false); 

     TextView textView = (TextView) view.findViewById(R.id.textView); 
     textView.setText(getItem(position)); 

     return view; 
    } 
} 

Вы можете сделать это с помощью следующего кода в MainActivty.java:

uk = getResources().getStringArray(R.array.countryView); 
listView = (ListView) findViewById(R.id.country_names); 

ArrayAdapter<String> adapter = new MyAdapter(this, uk); 
listView.setAdapter(adapter); 

for (int i=0; i<listView.getChildCount(); i++) { 
    TextView textView = (TextView) listView.getChildAt(i).findViewById(R.id.textView); 
    textView.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean hasFocus) { 
      if (hasFocus) { 
       // do something // 
      } 
     } 
    }); 
} 

Я надеюсь, это полезно.

+0

Спасибо за ваш быстрый ответ, но зачем редактировать текст, который я попросил для просмотра списков, и в фокусе не на клике также вы можете показать пример, пожалуйста, в фокусе для uk и ger, чтобы я мог понять, как это работает. У меня нет проблем, когда я делаю как textView, но его список из массива xml, пожалуйста, посмотрите на мой код и извините за плохое объяснение. –

+0

Дорогой спасибо за ответ, снова вставленный и последовавший за вашими шагами, но вы вмешались в edittext, который дает мне новую ошибку, поскольку у меня нет никакого edittext, также вы можете показать пример для следующего примера фокуса ger и frn (only) no нужно щелкнуть здесь и без editText пожалуйста. –

+0

Привет, я также хочу сказать, что вся моя работа общедоступна void onFocusChange (View v, boolean hasFocus) { // TODO Автоматически генерируемый метод заглушки if (hasFocus) { videoList.clear(); fetchVideosuk(); } }, поэтому я не использую editText или onclick здесь, его просто приходящая видеосъемка жаль, что я понял, но я все еще новичок. –