2015-10-20 32 views
0

我有一個listView與多行,我想添加一個鏈接,但我不知道如何做到這一點。與多個行和超鏈接的ListView

example

這是我的代碼

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="fill_parent" 
 
    android:layout_height="fill_parent" 
 
    android:orientation="vertical" > 
 

 
    <TextView 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="wrap_content" 
 
     android:gravity="center_vertical|center_horizontal" 
 
     android:text="Custom ListView Example" /> 
 

 
    <ListView 
 
     android:id="@+id/srListView" 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="fill_parent" /> 
 

 
</LinearLayout>

custom_row_view

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="fill_parent" 
 
    android:layout_height="fill_parent" 
 
    android:orientation="vertical" 
 
    android:paddingBottom="10dip" 
 
    android:paddingLeft="10dip" 
 
    android:paddingTop="10dip" > 
 

 
    <TextView 
 
     android:id="@+id/name" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:textColor="#FF00A7FF" 
 
     android:textSize="14sp" 
 
     android:textStyle="bold" /> 
 

 
    <TextView 
 
     android:id="@+id/cityState" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" /> 
 

 
    <TextView 
 
     android:id="@+id/phone" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" /> 
 

 
</LinearLayout>

SearchResults.java

public class SearchResults { 
 
    private String name = ""; 
 
    private String cityState = ""; 
 
    private String phone = ""; 
 

 
    public void setName(String name) { 
 
     this.name = name; 
 
    } 
 
    public String getName() { 
 
     return name; 
 
    } 
 

 
    public void setCityState(String cityState) { 
 
     this.cityState = cityState; 
 
    } 
 
    public String getCityState() { 
 
     return cityState; 
 
    } 
 

 
    public void setPhone(String phone) { 
 
     this.phone = phone; 
 
    } 
 
    public String getPhone() { 
 
     return phone; 
 
    } 
 
}

MyCustomBaseAdapter.java

public class MyCustomBaseAdapter extends BaseAdapter { 
 
    private static ArrayList<SearchResults> searchArrayList; 
 

 
    private LayoutInflater mInflater; 
 

 
    public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) { 
 
     searchArrayList = results; 
 
     mInflater = LayoutInflater.from(context); 
 
    } 
 

 
    public int getCount() { 
 
     return searchArrayList.size(); 
 
    } 
 

 
    public Object getItem(int position) { 
 
     return searchArrayList.get(position); 
 
    } 
 

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

 
    public View getView(int position, View convertView, ViewGroup parent) { 
 
     ViewHolder holder; 
 
     if (convertView == null) { 
 
      convertView = mInflater.inflate(R.layout.custom_row_view, null); 
 
      holder = new ViewHolder(); 
 
      holder.txtName = (TextView) convertView.findViewById(R.id.name); 
 
      holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState); 
 
      holder.txtPhone = (TextView) convertView.findViewById(R.id.phone); 
 

 
      convertView.setTag(holder); 
 
     } else { 
 
      holder = (ViewHolder) convertView.getTag(); 
 
     } 
 

 
     holder.txtName.setText(searchArrayList.get(position).getName()); 
 
     holder.txtCityState.setText(searchArrayList.get(position).getCityState()); 
 
     holder.txtPhone.setText(searchArrayList.get(position).getPhone()); 
 

 
     return convertView; 
 
    } 
 

 
    static class ViewHolder { 
 
     TextView txtName; 
 
     TextView txtCityState; 
 
     TextView txtPhone; 
 
    } 
 
}

MainActivity.java

public class MainActivity extends Activity { 
 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     ArrayList<SearchResults> searchResults = GetSearchResults(); 
 

 
     final ListView lv = (ListView) findViewById(R.id.srListView); 
 
     lv.setAdapter(new MyCustomBaseAdapter(this, searchResults)); 
 

 

 
     lv.setOnItemClickListener(new OnItemClickListener() { 
 
      @Override 
 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
 
       Object o = lv.getItemAtPosition(position); 
 
       SearchResults fullObject = (SearchResults)o; 
 
       Toast.makeText(MainActivity.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show(); 
 
      } 
 
     }); 
 
    } 
 

 
    private ArrayList<SearchResults> GetSearchResults(){ 
 
     ArrayList<SearchResults> results = new ArrayList<SearchResults>(); 
 

 
     SearchResults sr = new SearchResults(); 
 
     sr.setName("Hospital de Lisboa"); 
 
     sr.setCityState("Avenida 123 nº15"); 
 
     sr.setPhone("212321234"); 
 
     results.add(sr); 
 

 
     sr = new SearchResults(); 
 
     sr.setName("Hospital de Santarém"); 
 
     sr.setCityState("Rua de Cima nº20"); 
 
     sr.setPhone("234234234"); 
 
     results.add(sr); 
 

 

 

 
     return results; 
 
    } 
 
}

+0

Is this [this](http://stackoverflow.com/questions/7951752/auto-link-property-different-text-with-the-actual-linking-setautolinkmask)對你有用嗎?它基本上將HTML分配給'TextView' – PPartisan

回答

0

你不能只創建一個新的TextView,創造新方法,以你的SearchResult所那麼就sr.setNewLine()?

+0

什麼方法?我可以寫名字,但我不能把鏈接 – Badjoras10

+0

如果你只是想讓它可以點擊,你只需要添加這個屬性到你的textview android:autoLink =「web」 – Spider