#android #listview
#Android #listview
Вопрос:
Я хочу создать приложение, в котором у меня есть ListView
.
Я хочу, чтобы мой ListView
выглядел так, как показано на рисунке ниже. Но дело в том, что только Button
s в списке доступны для просмотра, ничего больше. Как я могу этого добиться
CustomList.Xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<LinearLayout
android:orientation="vertical"
android:layout_width="250dp"
android:background="#fff"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Job Code"
android:id="@ id/tv_job_code"
style="@style/Job_on_Call"
android:layout_marginTop="5dp"
android:layout_marginLeft="10dp"
android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Category"
android:id="@ id/tv_category"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="("
android:id="@ id/textView4"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Years"
android:id="@ id/tv_exp_yrs"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=","
android:id="@ id/textView5"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mnths"
android:id="@ id/tv_exp_mnths"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=")"
android:id="@ id/textView45"
style="@style/Job_on_Call"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Posted On:"
style="@style/Job_on_Call"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6-12-2014"
android:id="@ id/tv_date"
style="@style/Job_on_Call"
android:layout_marginLeft="5dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Matching Jobs"
android:id="@ id/button"/>
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Applied Jobs"
android:id="@ id/button2"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
CustomAdapter
package com.example.jobs_on_call_adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.jobs_on_call.app.R;
import com.example.jobs_on_call_object.SearchValues;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Created by ANUJ on 6/11/2014.
*/
public class SearchJobsCustomList extends BaseAdapter {
Context c;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String> ();
ArrayList<SearchValues> values;
SearchValues a;
public SearchJobsCustomList(Context c, ArrayList<SearchValues> values) {
super ();
this.c = c;
this.values = values;
}
@Override
public int getCount() {
return values.size ();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
a = new SearchValues ();
if (view == null) {
view = LayoutInflater.from (c).inflate (R.layout.custom_search_jobs_lists, viewGroup, false);
a = values.get (i);
TextView JobCode = (TextView) view.findViewById (R.id.tv_job_code);
TextView Category = (TextView) view.findViewById (R.id.tv_category);
TextView ExpYrs = (TextView) view.findViewById (R.id.tv_exp_yrs);
TextView ExpMnths = (TextView) view.findViewById (R.id.tv_exp_mnths);
TextView Date = (TextView) view.findViewById (R.id.tv_date);
JobCode.setText (a.code);
Category.setText (a.title);
// ExpYrs.setText (resultp.get ("minExp"));
// ExpMnths.setText (resultp.get ("maxExp"));
// Date.setText (resultp.get ("postedOn"));
// JobCode.setText ("CGT011");
// Category.setText ("Press");
// ExpYrs.setText ("1 Year");
// ExpMnths.setText ("5 Months");
// Date.setText ("6-6-14");
}
return view;
}
}
Комментарии:
1. Вы установили OnItemClickListener в ListView?
2. Можете ли вы показать нам пользовательский адаптер?
3. Просто установите OnItemClickListener в listview или реализуйте интерфейс OnItemClickListener в своей деятельности.
Ответ №1:
ListView listview = (ListView)findViewById(R.id.list);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//Do your code here
}
});
Комментарии:
1. я сделал, но список не доступен для просмотра: (
Ответ №2:
private class CustomList extends BaseAdapter
{
LayoutInflater inflater;
public CustomList()
{
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}
public int getCount()
{
return arrItem.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parentView)
{
ViewHolder holder;
if (convertView == null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.Yourlayout, parentView, false);
holder.btn1=(RelativeLayout)convertView.findViewById(R.id.btn1);
holder.btn2=(RelativeLayout)convertView.findViewById(R.id.btn2);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
holder.btn1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//apply your logic here.
// you can get data here like. items.get(position);
//items is custom Arraylist , ArrayList<Items> items=new ArrayList<Items>();
}
});
holder.btn2.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//apply your logic here.
}
});
convertView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//apply your logic here.
}
});
return convertView;
}
class ViewHolder
{
Button btn1,btn2;
}
}
Один из простых способов… nJoy 🙂
Ответ №3:
Используйте android:focusable="false"
в своих свойствах кнопок в CustomList.Xml . Это должно сработать.
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Matching Jobs"
android:focusable="false"
android:id="@ id/button"/>
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Applied Jobs"
android:focusable="false"
android:id="@ id/button2"/>
</LinearLayout>
</LinearLayout>
Не забудьте добавить setOnItemClickListener в свой listview.
Комментарии:
1. да, это сработало. Но, сэр, как изменить цвет, когда пользователь выбирает список, потому что теперь цвет не отображается
2. Используйте селекторы для изменения щелчка.
3. Кстати, вы можете принять это и задать новый вопрос о том, как изменить цвет.
4. когда пользователь выбирает определенный элемент списка, цвет списка должен меняться на синий, но этого не происходит
Ответ №4:
ListView lv = (ListView)findViewById(R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//here your logic
}
});
Комментарии:
1. я пытался сделать подобное, но этот список не является активным олько @override общественного недействительными onItemClick(AdapterView<?> adapterView, вид Вид, внутр я, долго л) { тост.makeText (с, «отобрал у» я, тосты. LENGTH_LONG). показать (); }
Ответ №5:
Вы можете попробовать изменить фон элемента вашего пользовательского listview в его onclicklistener
yourlistview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
holder.yourlayout.setBackgroundColor(Color.CYAN);
}
});
Ответ №6:
Вам нужно использовать setOnItemClickListener()
для обнаружения кликов по элементам ListView.
Однако, если вы разместите фокусируемые представления на a ListView
, то OnItemClickListener из ListView не сработает. Поэтому вам также необходимо установить android:focusable
и android:focusableInTouchMode
для Button
виджетов в макете элемента ListView.