我有以下片段设置:
1
和2
是分别包含A
和B
片段的标签。 A
中有一个按钮,点击后会显示C
。
正常运行:在第一个标签1
中,A
通过xml静态添加。点击该按钮后,C
启动正常,按后退按钮可以让我回到A
。
|__1__| 2 |
| A | B |
↓
| C |
失败:在B
中,有一个动态打开A
的按钮。现在推送A
中与前一个案例相同的按钮,但在此视图中, C
无法显示。我可以在adb中看到数据加载得很好但不知何故它不在视野中。
| 1 |__2__|
| A | B |
↓
| A |
↓
| C |
我从A
到C
的按钮代码是:
@Override
public void onReshareTextClick(View v, int position) {
this.getFragmentManager().beginTransaction().replace(R.id.feedContent,
LikeReshareFragment.newInstance(feedAdapter.getFeedItem(position), Utils
.FragmentType.Reshare))
.addToBackStack(null).commit();
}
B
到A
的代码是:
@Override
public void onPhotoClick(View v, int position) {
this.getFragmentManager().beginTransaction().replace(R.id.llMySnaps,
FeedFragment.getInstance(sharedFeedItems))
.addToBackStack(null).commit();
}
问题:由于有两个具有相同名称的片段,我怀疑这一行在标签replace(R.id.feedContent,..
中有问题2
。它可能实际上替换了标签A
中的1
(不可见),而不是标签2
中的C
。这是正确的和/或如何解决这个问题?
更新
我可以确认上述说法。 1
实际上显示在标签A
中。为什么会这样?因为,android有两个R.id.feedContent
(常量ID B
)可供选择,如何明确使用if(isset($_POST["submit"]))
{
$ans=array();
$ans=$_POST['student'];
$re=mysql_query("SELECT `st_id` FROM `student_info`
WHERE `sem` ='$selsem'
AND `st_id` NOT IN (".implode(',',array_map('intval',$ans)).")");
while ($ro = mysql_fetch_row($re)){
mysql_query("insert into manage_attendance(st_id,date,sem,period,subject,status) values('$ro[0]','$seldate','$selsem','$selperiod','$selsub','0')"); }
//Here goes array
for($i=0;$i<count($_POST['student']);$i++)
{
$id=$_POST['student'][$i];
//echo $id;
$check=1;
mysql_query("insert into manage_attendance(st_id,date,sem,period,subject,status) values('$id','$seldate','$selsem','$selperiod','$selsub','$check')");
//print_r ($_POST['student']);
}
}
启动的那个?
答案 0 :(得分:0)
问题是Android在R.id.feedContent
上执行DFS以查找要在事务中替换的视图。
<强>解决方案强>
通过以编程方式为视图分配ID
,我能够找到
正确的观点来取代。
设置视图ID:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_feed, container, false);
CoordinatorLayout coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.feedContent);
coordinatorLayout.setId(feedID+10); // here feedID is what differentiates the two feed fragments
return view;
}
以下是替换片段的调用:
this.getFragmentManager().beginTransaction().replace(feedID+10, openPostFragment)
.addToBackStack(null).commit();