我有一个似乎无法解决的问题。我有ListView
,此ListView
包含一个对象(IndividualRow
)。此IndividualRow
有3个值,显示在textviews
和开关中。这些IndividualRows
存储在ArrayList
中,但后来卡住了。
我想按下TextViews
中的1(显示温度),当我按下时,它会自动添加1。
现在的问题是我不知道如何实现这个。我尝试了几件事,但是我想不出来。我不是特别想要代码,但我想知道我应该做什么,所以我不会复制过去,也不会从中学习。到目前为止,这是我的代码。
(我有一个自定义适配器,以便ListView相应地显示我的行,如果你愿意,我可以在这里包含它)
list_item.xml(这是一行的样子)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="14dp"
android:paddingBottom="14dp" >
<Switch
android:id="@+id/switch1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:height="30dp"
android:textSize="22sp"
android:textOff="@string/Off"
android:textOn="@string/On"
android:paddingLeft="30dp" />
<TextView
android:id="@+id/tijd"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:clickable="true"/>
<TextView
android:id="@+id/temperatuur"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:clickable="true"/>
<TextView
android:layout_width="wrap_content"
android:textSize="22sp"
android:layout_height="wrap_content"
android:text="@string/GradenCelcius"
android:paddingRight="10dp" />
</LinearLayout>
这是IndividualRow代码
//holds values for each individual row
public class IndividualRow {
//instance variables
private String tijd;
private int temperatuur;
private boolean onoroff2;
//constructor > what an individual row needs to be an individual row
public IndividualRow(String data1,int data2, boolean onoroff){
tijd = data1;
temperatuur = data2;
onoroff2 = onoroff;
}
//sends value of tijd
public String getString1(){
return tijd;
}
//sends value of temperatuur
public String getString2(){
String x = Integer.toString(temperatuur);
return x;
}
//sends value of switch state, so on or off (on = true, off = false)
public boolean getBoolean() {
return onoroff2;
}
//probably should add setString1 and so on here right?
}
而这里的片段应该是全部操作
public class SettingTimeFragment extends Fragment{
//Instance Variables
private List<IndividualRow> items = new ArrayList<IndividualRow>();
private CustomAdapter adapter;
private ListView rowListView;
private String tijd = "0:00";
private int temperatuur = 15;
private boolean onoroff = true;
//creates the SettingTimeFragment
public static final SettingTimeFragment newInstance(){
SettingTimeFragment f = new SettingTimeFragment();
return f;
}
//providing it's layout
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.setting_time_fragment, container, false);
}
//creates the content of SettingTimeFragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onActivityCreated(savedInstanceState);
items.add(new IndividualRow(tijd, temperatuur, onoroff));// add initial row
adapter = new CustomAdapter(getActivity().getApplicationContext(),R.layout.list_item, items); // create new CustomAdapter
rowListView=(ListView)getActivity().findViewById(R.id.rowListView); // find rowListView
rowListView.setAdapter(adapter); //attach adapter to rowListView
}
//creates menu on top of the screen
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.setting_time_fragment_menu, menu);
}
//finds each individual button in menu and handles click events
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.additionbutton:
addRow(new IndividualRow(tijd, temperatuur, onoroff));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
//adds a new IndividualRow
public void addRow(IndividualRow newRow) {
items.add(newRow);
adapter.notifyDataSetChanged(); //updates adapter that there is new information to display
}
}
答案 0 :(得分:2)
我是android新手。但我会尝试我几乎类似的情况所做的事情。
首先,我不知道您在示例中谈论的listview
。我可以看到你使用textview
,我怀疑这是否可以默认点击。我使用了这样的android列表视图,可以在每次点击时更新:
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/item_list" />
这就是我创建适配器的方式:
final ArrayAdapter<ContentData> adapter = new ArrayAdapter<ContentData>(this, android.R.layout.simple_list_item_1, values);
这就是我更新listview
(longClick
示例,您可以使用OnClick
)的方式:
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> myAdapter, View myView, int position, long id) {
//update your list and perform your actions
//notify your adapter about the changes if required
return true;
}
});
您可能需要研究如何在上述方法中使用values.get()
。基本上是关于上述方法中position
和id
代表的内容以及adapter
和view
可以提供的内容。
我希望它不会让你感到困惑。以上示例来自我为实现学习目的而实施的实际代码,因此它可能不是最佳解决方案。