我在片段A中有一个包含3列的网格视图。我想读取click事件的第一个列值并将值传递给FragmentB。
如何阅读在网格视图上单击的行的第一列?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_flight, container, false);
// Inflate the layout for this fragment
grid = (GridView) view.findViewById(R.id.gridView);
MyAdapter myAdapter = new MyAdapter(getActivity());
grid.setAdapter(myAdapter);
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String place= (String) grid.getItemAtPosition(position);
//How to read the first column value of the row clicked?
}
});
return view;
}
grid_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal">
<TextView
android:id="@+id/Destination"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/Description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
fragment_flight.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.test.FlightFragment">
<!-- TODO: Update blank fragment layout -->
<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/gridView"
android:layout_gravity="left|top"
android:numColumns="3"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:stretchMode="columnWidth"
android:columnWidth="100dp"
/>
添加代码后
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position==0||position%3==0)
{
String place= (String) grid.getItemAtPosition(position);
interfaceDataCommunicator.SendMarkerPlaceInfo(place);
}
}
我有错误
FATAL EXCEPTION: main java.lang.ClassCastException: com.test.FlightFragment cannot be cast to java.lang.String at com.test.FlightFragment.onItemClick(BurnScheduleFragment.java:51) at android.widget.AdapterView.performItemClick(AdapterView.java:301) at android.widget.AbsListView.performItemClick(AbsListView.java:1539) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3332) at android.widget.AbsListView$1.run(AbsListView.java:4554) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5279)
AdapterClass
class MyAdapter extends BaseAdapter {
ArrayList<Schedule> list;
private Context context;
MyAdapter(Context context) {
this.context = context;
list = new ArrayList();
Resources resources = context.getResources();
String[] tempDestination = resources.getStringArray(R.array.Destination);
String[] tempDate = resources.getStringArray(R.array.Date);
String[] tempDescription = resources.getStringArray(R.array.Description);
for(int count=0;count<4;count++ ){
Flight tempFlight = new Flight(tempDestination[count],tempDate[count],tempDescription[count]);
list.add(tempFlight);
}
}
查看getView方法
public View getView(int position, View convertView, ViewGroup parent) {
Schedule tempFlight = list.get(position);
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.grid_row, parent, false);
holder = new ViewHolder();
holder.Destination = (TextView) convertView.findViewById(R.id.Destination);
holder.Description = (TextView) convertView.findViewById(R.id.description);
holder.Time =(TextView) convertView.findViewById(R.id.Date);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.Destination.setText(tempFlight.Destination);
holder.Description.setText(tempFlight.Description);
holder.Time.setText(tempFlight.Time);
return convertView;
}
答案 0 :(得分:0)
由于您只想读取第一列,而您的网格包含3列 即。
0 1 2
3 4 5
6 7 8
...
您将观察到,第一列只有索引'0'或3的倍数。
在方法OnClickListener
中,您可以检查 int position的值。
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//How to read the first column value of the row clicked?
if (position==0||position%3==0)
{
// Do whatever you want here
String place= tempDestination[count];
}
}
});
答案 1 :(得分:0)
在MyAdapter类中:
public View getView(int position,View convertView,ViewGroup parent){
String str = "some text";
convertView.setTag(str);//you can pass any object in place of string
return convertView;
}
现在抓住您活动中的价值,如下所示:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String = view.getTag();
}
答案 2 :(得分:0)
你做错了
首先你必须得到视图(在你的情况下它应该是textview),然后得到
来自此textview的值
E.g。
String contactId = ((TextView) view.findViewById(R.id.yourtextviewid)).getText().toString();
答案 3 :(得分:0)
使用 TextView textViewItem =((TextView)view.findViewById(R.id.Destination));给了我预期的结果。谢谢大家的帮助