2015-09-20 17 views
2

Я использовал AsyncTask для выполнения моего ListView.Кнопка прослушивателя в ListView

public class SIPSettingsFragment extends ListFragment implements View.OnClickListener, AsyncResponse { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_sipsettings, container, false); 

new DownloadJSON().execute(); 

return rootView; 
} 

public class DownloadJSON extends AsyncTask<Void, Void, Void> { 

     /* 
     some code 
     */ 
     @Override 
     protected void onPostExecute(Void result){ 
      super.onPostExecute(result); 

      if (pDialog.isShowing()) 
       pDialog.dismiss(); 

      listView = (ListView) getActivity().findViewById(android.R.id.list); 

      adapter = new SimpleAdapter(
        getActivity(), 
        usersList, 
        R.layout.sipuser_list_item, 
        new String[] { TAG_USERNAME, TAG_ADDR, TAG_STATE }, 
        new int[] { R.id.username, R.id.addr, R.id.state} 
      ); 
      ((SimpleAdapter) adapter).notifyDataSetChanged(); 
      setListAdapter(adapter); 

      Log.d("lab", "Done"); 
     } 

И мой XML

fragment_sipsettings.xml

<LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/userListLayout" 
     android:layout_gravity="center_horizontal"> 
      <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@android:id/list" /> 

    </LinearLayout> 

sipuser_list_item.xml

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:text="Username: " 
       android:layout_alignParentLeft="true" 
       android:id="@+id/usernameSIP" /> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:id="@+id/username" 
       android:layout_alignParentTop="true" 
       android:layout_toEndOf="@+id/usernameSIP" /> 

      <Button 
       android:id="@+id/deleteSIPUser" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Delete user" 
       android:layout_alignParentRight="true"/> 


     </RelativeLayout> 

Список с кнопках отображаются корректно. Как реализовать кнопку OnClickListerer для кнопки от sipuser_list_item.xml?

Edit:

Решаю мой вопрос, расширить SimpleAdapter и переопределить getView() в AsyncTask @Krupal шаха и @cylon

+0

возможно дубликат [Как установить onclicklistener для кнопки внутри ListView в Android?] (Http://stackoverflow.com/questions/13915559/how-to-set-a-onclicklistener-for-button -inside-The-ListView-в-андроида) – 0X0nosugar

ответ

2

Вы можете либо расширить SimpleAdapter или использовать анонимный внутренний класс, как показано ниже, в расширяющемся или анонимном классе, вы должны переопределить метод GetView(). Внутри метода getView вы можете найти кнопку по id и установить на нее кнопку прослушивания.

SimpleAdapter k=new SimpleAdapter(
        getActivity(), 
        usersList, 
        R.layout.sipuser_list_item, 
        new String[] { TAG_USERNAME, TAG_ADDR, TAG_STATE }, 
        new int[] { R.id.username, R.id.addr, R.id.state} 
      ) 
    { 
     @Override 
     public View getView (int position, View convertView, ViewGroup parent) 
     { 
      View view = super.getView(position, convertView, parent); 

      Button btn=(Button)v.findViewById(R.id.sipuser_list_item); 
      btn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // click of the button 
       } 
      }); 
      return view; 
     } 

    }; 
2

Попытка переписать getView() метод SimpleAdapter или написать свой собственный адаптер, который расширяет BaseAdapter класс.

adapter = new SimpleAdapter(...) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent){ 
      View view = super.getView(position, convertView, parent); 
      // get your button here 
      Button button = (Button) view.findViewById(R.id.button); 
      button.setOnClickListener(....); // set your onclick listener 
      return view; 
    } 
} 
Смежные вопросы