2017-12-31 44 views

Antwort

0

vielleicht etwas ausführlicher (Code-Snippet) könnte hier hilfreich sein, um auf Ihre Anfrage zu antworten. Aber ich werde hier eine verallgemeinerte Lösung anbieten.

Auf der Aktivität/Fragment Sie Ihre Listenansicht initialisiert, Sie Listviews setOnItemClickListener Methode und überschreiben die AdapterViews onItemClick Methode, um Ihre Listenposition Position bekommen verwenden können:

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

       /*listAdapter is the adapter for your listView and ListItem 
       represents individual item model for the list*/ 

       ListItem listItem= listAdapter.getItem(i); 
       if(listItem!=null){ 
        //show your dialog message according to listItem here 
       } 

      } 
     }); 
0

Wenn Sie mit etwas Adapter zu füllen Ihre Listenansicht

public class DemoListView extends AppCompatActivity implements ListAdapter.PlaceClickInterface { 

    ListView listView ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_demo_list); 

     List<String> places = new ArrayList<>(Arrays.asList("New york","washington","london")); 
     listView = (ListView)findViewById(R.id.list_view_demo); 
     ListAdapter adapter = new ListAdapter(places , this) ; 
     listView.setAdapter(adapter); 
    } 


    @Override 
    public void onPlaceClick(int position) { 
     Log.v("DemoListView" , "position : "+position) ; 
     //show dialog here with Alert dialog builder or ListFragment class with custom UI 
    } 
} 

Extend Liste Adapter wie ArrayAdapter oder BaseAdapter:

In diesem Adapter erstellen ein Schnittstelle, die in der Aktivität (DemoListView) implementiert werden kann, in der das Dialogfeld angezeigt werden soll.

In der implementierten Methode onPlaceClick() in DemoListView erstellen und zeigen Sie das Dialogfeld

public class ListAdapter extends BaseAdapter{ 

    List<String> mPlaces ; 
    Context mContext ; 
    LayoutInflater mInflater ; 
    PlaceClickInterface mPlaceClickInterface; 

    public ListAdapter(List places , DemoListView demoListView) { 
     this.mContext = demoListView.getBaseContext() ; 
     this.mPlaces = places ; 
     this.mInflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.mPlaceClickInterface = (PlaceClickInterface) demoListView; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.item_list_data, parent, false); 
      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.bind(holder ,position); 
     return convertView ; 
    } 

    private class ViewHolder{ 

     TextView places ; 
     ViewHolder(View view){ 
      this.places = (TextView) view.findViewById(R.id.list_place); 
     } 
     // used to populate the list with list item and attach click listener on each item 
     void bind(ViewHolder holder ,final int position){ 
      holder.places.setText(mPlaces.get(position)); 
      holder.places.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        mPlaceClickInterface.onPlaceClick(position); 
       } 
      }); 
     } 
    } 

    public interface PlaceClickInterface { 
     void onPlaceClick(int position) ; 
    } 
} 
Verwandte Themen